2

我学会了如何使用TransactionScope在另一个我的问题中配置实体框架中的交易。但它仍然让我困惑!我的意思是RIA服务如何执行交易,我们如何指定交易选项?我的意思是,假设在Silverlight客户端上,我们指定是这样的: -ria服务如何管理交易

someContext.Add(someEntity1); 
someContext.Add(someEntity2); 
someContext.Add(someEntity3); 

现在,当我打电话someContext.SubmitChanges()这是要调用服务器上的InsertSomeEntity()在我的域服务类。什么是保证所有三条记录都会被插入到数据库中,如果一个都失败了,所有这些记录都会失败?我们如何改变这些选择?

+1

希望这会有所帮助http://bit.ly/fbwR85 – Hukam 2011-03-26 14:13:18

+0

您还需要考虑并发性问题。 WCF RIA让你的生活变得有趣。阅读的起点是http://sklementiev.blogspot.com/2010/03/wcf-ria-and-concurrency.html。代码有点旧,不再适用,但是可以通过一种方法阅读。 – Rus 2011-03-26 14:31:54

回答

5

Chand的链接就是一个很好的例子。 WCF RIA将为SubmitChanges提交ChangeSet,其中包含所有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个请求。