none
使用RIA Services 怎样实现关联实体同时更新到数据库?且支持事务 RRS feed

  • 问题

  • 如两个实体:
    public class Department
    {
         public string DepartmentName {get; set;}
    }

    public class Employee
    {
        public string Name {get; set;}
        public Department Department {get;set;}
    }

    我想在新增或更新EMPLOYEE表的同时,能更新Department表,比如,可以更新部门名称DepartmentName.
    2010年7月28日 6:55

答案

  • 你好,

         你好这个是Transaction,不过不推荐这样使用。

         基本上RIA整个代码逻辑都是通过这个base.Submit方法展开的,它会一步一步的把整个ChangeSet通过调用方法处理,从AuthorizeChangeSet一直到ResolveChangeSet.

         个人认为一个Transaction不该持续那么长,并且Authorize以及Validate阶段没有道理放在Transaction中。

         你可以把你的Transaction放在PersisChangeSet(保存你所做的操作到数据源)中,如果你使用的是LintToEntityDomainService的话,OBjectContext.SaveChanges就实在这个时候调用的。

    2010年8月4日 1:48

全部回复

  • 没人回答,难道RIA SERVICES 不支持事务吗?
    2010年7月29日 3:01
  • 谢谢您的回复
    --重写Submit
    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;
    }
    
    
    private void myDataSource_SubmittedChanges(object sender, SubmittedChangesEventArgs e)
      {
       if (e.HasError)
       {
        System.Diagnostics.Debug.WriteLine(e.Error.ToString());
        e.MarkErrorAsHandled();
       }
    
      }
    
    DomainContent t = new DomainContent(); 
    
    Person a = new Person() ;
    a.Name="TEst";
    
    Book b = new Book(); 
    b.Name="Book";
    
    t.Persons.Add(a) 
    t.Books.Add(b) 
    t.SubmitChanges() 
    
    
    数据时保存到数据库,但不知道是不是在事务中完成的
    
    2010年7月30日 8:28
  • 你好,

         你好这个是Transaction,不过不推荐这样使用。

         基本上RIA整个代码逻辑都是通过这个base.Submit方法展开的,它会一步一步的把整个ChangeSet通过调用方法处理,从AuthorizeChangeSet一直到ResolveChangeSet.

         个人认为一个Transaction不该持续那么长,并且Authorize以及Validate阶段没有道理放在Transaction中。

         你可以把你的Transaction放在PersisChangeSet(保存你所做的操作到数据源)中,如果你使用的是LintToEntityDomainService的话,OBjectContext.SaveChanges就实在这个时候调用的。

    2010年8月4日 1:48
  • 谢谢您的回答
    2010年8月4日 8:22