我学会了如何在我的另一个问题中使用TransactionScope在Entity Framework中配置事务。但它仍然让我感到困惑!我的意思是RIA服务如何执行交易以及我们如何指定交易选项?我的意思是,假设在Silverlight的客户端上我们指定了这样的东西: -
someContext.Add(someEntity1);
someContext.Add(someEntity2);
someContext.Add(someEntity3);
现在,当我呼叫someContext.SubmitChanges()
时,这将在我的域服务类中的服务器上调用InsertSomeEntity()
。将所有三条记录插入到数据库中的保证是什么,如果一条记录失败,所有记录都会失败?我们如何改变这些选择呢?
答案 0 :(得分:5)
Chand的链接就是一个很好的例子。 WCF RIA将为SubmitChanges提交一个包含所有3个Add的变更集。在您的DomainService中,您可以覆盖PersistChanges方法以完成事务。
public class SomeEntityDomainService : DomainService
{
SomeEFContext _someEFContext;
public SomeEntityDomainService()
{
_someEFContext = new SomeEFContext();
}
public void InsertSomeEntity(SomeEntity someEntity)
{
// Called 3 times in your example
_someEFContext.SomeEntities.Add(someEntity);
}
protected override bool PersistChangeSet()
{
// Called exactly once per SubmitChanges() in Silverlight
_someEFContext.SaveChanges();
}
}
所有这一切都发生在从客户端到服务器的一个请求中,而不是3个请求。