实体框架——复杂类型之间的关系没有得到更新



所以与实体框架,我试图更新两个现有的实体。

主对象是这样的

public class MainObject
{
     public string Name { get; set; }
     public virtual SmallObject Part { get; set;}
}
public class SmallObject 
{
    public string Name { get; set; }
}

在存储库中,我首先检查SmallObject是否已经存在于数据库中:

MainObject.Part = (from s in repoSmallObject.GetAll()
            where s.name == MainObject.Part.Name
            select s).FirstOrDefault(); 

最后我调用GenericRepository中的update方法

repoMainObject.Update(MainObject)

被定义为一个通用的存储库方法:

dbSet.Attach(entity)
context.Entry(entity).State = EntityState.Modified;
context.SaveChanges();

但是关系不会被更新。为什么呢?两个对象都依附于上下文,不是吗?

*编辑:两个repo被注入相同的Context。奇怪的是,Add方法可以工作,还可以更新关系。

设置
context.Entry(实体)。
context.Entry(实体)。
状态= EntityState.Added;因为EF只需要生成一个INSERT查询。

我不知道你为什么需要它,但通常我更喜欢将对象附加到DbSet并修改属性,以便EF处理各种状态。

dbSet.Attach(MainObject)
MainObject.Part = (from s in repoSmallObject.GetAll()
            where s.name == MainObject.Part.Name
            select s).FirstOrDefault(); 

(在你的例子中不起作用因为MainObject.Part.Name没有改变)

附加的对象应该具有与数据库相同的值,否则会导致并发性异常。

顺便说一句,为什么你不从DB中读取旧对象(MainObject)而不是在它上面工作??

最新更新