两次调用方法“context.saveChanges”

时间:2014-01-23 04:01:39

标签: c# entity-framework

按照我的代码(只是演示疑问),这段代码我在我的服务中有一个接收用户和保存列表的方法,唯一的业务规则是检查用户是否已经存在。

还有一个关于该调用的日志,这个想法很简单,它会安静地工作,我的疑问是,我做了2 SaveChanges ()并且它似乎是错的,我怎么能改进这个代码?我以为我只会在CreateUser方法()中调用一次,但这样做会很危险,因为在"用户"中可能会重复使用CPF。列表,我将不得不创建一个验证此列表,但我想避免这种情况,因为在我看来,最少的问题,我认为我在解决方案架构上犯了错误。

public class Service : IMyService {
   private UserEntitiescontext context = new UserEntities();  

   // Service method

   public bool CreateUser(List<User> users) {
        foreach (var user in users) {
            new UserDomain().createUser(context, user);

            new LogDomain().createLog(context, new Log { UserCreated = user .... });   
       }   
   }      
}

public class UserDomain() {

   private createUser(UserEntities context, User user) {

          if (context.Users.Where(f=>f.CPF == user.CPF).FirstOrDefault() != null) {
              context.Attach(user);    
              context.SaveChanges();                  
          }   
   }  
}

public class LogDomain() {

   private createLog(UserEntities context, Log log) {   
             context.Attach(log);   
             context.SaveChanges(); 
   }    
}

2 个答案:

答案 0 :(得分:0)

   public bool CreateUser(List<User> users) {
        foreach (var user in users) {
            new UserDomain().createUser(context, user);   
            new LogDomain().createLog(context, new Log { UserCreated = user .... });    
       }

      context.SaveChanges(); 
   } 

答案 1 :(得分:-1)

没有解决,因为我可以拥有CPF的“用户”重复列表。除此之外,我的班级“UserDomain”将承担更多的责任,伤害模式。