NET RIA SERVICE 关联实体同时更新到数据库
最近在用SL开发一个MIS项目,因接触时间不长,遇到了很多问题,现把学习心得写下来.
1、前台代码
代码
<my2:DomainDataSource x:Name="myDataSource" LoadingData="myDataSource_LoadingData" LoadedData="myDataSource_LoadedData"
SubmittedChanges="myDataSource_SubmittedChanges" AutoLoad="False" LoadSize="40">
<my2:DomainDataSource.DomainContext>
<ria:FamilyDomainContext></ria:FamilyDomainContext>
</my2:DomainDataSource.DomainContext>
<my2:DomainDataSource.SortDescriptors>
<my2:SortDescriptor PropertyPath="CreateTime" Direction="Descending" ></my2:SortDescriptor>
</my2:DomainDataSource.SortDescriptors>
</my2:DomainDataSource>
SubmittedChanges="myDataSource_SubmittedChanges" AutoLoad="False" LoadSize="40">
<my2:DomainDataSource.DomainContext>
<ria:FamilyDomainContext></ria:FamilyDomainContext>
</my2:DomainDataSource.DomainContext>
<my2:DomainDataSource.SortDescriptors>
<my2:SortDescriptor PropertyPath="CreateTime" Direction="Descending" ></my2:SortDescriptor>
</my2:DomainDataSource.SortDescriptors>
</my2:DomainDataSource>
2、下边一段实现myDataSource 查询方法动态指定,参数动态添加
代码
private FamilyDomainContext familyDomainContext = new FamilyDomainContext();
this.familyDomainContext = this.myDataSource.DomainContext as FamilyDomainContext;
//查询参数清空,一定要放在QueryName前边,不然会出错
this.myDataSource.QueryParameters.Clear();
this.myDataSource.QueryName = "GetJKDA_FamilyRecordByLastNameLetterQuery";
var p = new Parameter();
p.ParameterName = "houseHoldeName";
p.Value = key;
this.myDataSource.QueryParameters.Add(p);
this.myDataSource.Load();
//查询参数清空,一定要放在QueryName前边,不然会出错
this.myDataSource.QueryParameters.Clear();
this.myDataSource.QueryName = "GetJKDA_FamilyRecordByLastNameLetterQuery";
var p = new Parameter();
p.ParameterName = "houseHoldeName";
p.Value = key;
this.myDataSource.QueryParameters.Add(p);
this.myDataSource.Load();
3、重写服务端DomainService 中的Submit ,Person和Book模型的Insert,Update,Delete放在同一个DomainService中
代码
public override bool Submit(ChangeSet changeSet)
{
bool result = false;
using (
var tx = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions{IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted})
)
{
result = base.Submit(changeSet);
if (!this.ChangeSet.HasError)
{
tx.Complete();
}
}
return result;
}
{
bool result = false;
using (
var tx = new TransactionScope(TransactionScopeOption.Required,
new TransactionOptions{IsolationLevel = System.Transactions.IsolationLevel.ReadCommitted})
)
{
result = base.Submit(changeSet);
if (!this.ChangeSet.HasError)
{
tx.Complete();
}
}
return result;
}
4、数据保存
代码
Person a = new Person();
a.Name="Test";
Book b = new Book();
b.Name="Book";
this.FamilyContext.Persons.Add(a);
this.FamilyContext.Books.Add(b);
this.FamilyContext.Books.Add(b);
this.MyDomainDataSource.SubmitChanges();
数据是同时保存到数据库了,但不知道是不是在事务中完成的,国内这方便的资料很少,也没有实例,-_-


浙公网安备 33010602011771号