如何防止EF重新插入其他dbcontext的对象?
-
25-10-2019 - |
题
我在MVC 3项目中使用EF 4.1,并且在插入对象时遇到问题。我也在使用会话来保留一些对象。在具体中:
我有一个简单的班级,有父母的关系:
public class Event
{
public User Promotor {get;set;}
}
启动子基于当前使用者。在我的应用程序中,我将Currentuser存储在HTTP会话中。现在,当我添加这样的事件时,用户(和所有相关对象)将使用新的主键插入一次。
//1st request inserts/loads the user
User user;
using (var context = new MyDbContext())
{
user = new User();
context.Users.Add(user);
context.SaveChanges();
}
//2nd request saves the event
var before = db.Users.Count();
var @event = new Event
{
Promotor = user, //user was kept in Session
};
db.Entry(@event).State = EntityState.Added;
db.SaveChanges();
当我检查用户的状态时,它也会“添加”,尽管主键不是0,并且EF应该知道它已经持久。如何在不添加很多持久性代码的情况下解决此问题。我是否必须根据每个请求将当前使用者重新计入新的dbcontext?这将导致DB代码“泄漏”到我的应用程序中。我想将DB的内容保存在数据层中。我正在使用这样的存储库:
public void Save(T entity)
{
dbContext.Entry(entity).State = IsPersistent(entity) ?
EntityState.Modified : EntityState.Added;
dbContext.SaveChanges();
}
解决方案
正如您已经提到了自己的那样,将用户重新连接到当前上下文应该解决问题。我所知道的唯一方式是,基于主要键值在上下文中再次检索对象。
不隶属于 StackOverflow