如果父对象的所有属性都是虚拟的,则实体框架 6 不会保存导航对象(状态为"未更改")



我有以下类:

 public class A
{
    [Key]
    public virtual int ID { get; set; } //virtual here raises error!
    public virtual B B { get; set; }
}
 public class B
    {
        [Key]
        public int ID { get; set; }
        [Required]
        public string title { get; set; }
    }

和代码:

   var context = new Model1();
    var dbSet = context.Set<A>();
    var dbSet1 = context.Set<B>();
    var a = dbSet.Find(1);
    var b = a.B;
    b.title = DateTime.Now.Ticks.ToString();
    int changes1 = context.SaveChanges();
    if (changes1 == 0)
        throw new Exception("not updated");

如果我从A类中的属性ID中删除"虚拟",则所有内容都在起作用。我需要虚拟的属性才能在Nhibernate中使用该模型。

谢谢

我能够复制它,显然是EF6错误。

我可以建议2个解决方法。要么(1)Make 所有 B成员virtual,或(2)急切的负载(懒惰和显式加载无效)在编辑它之前。<<<<<<<<<<。/p>

即。而不是

var a = dbSet.Find(1); // doesn't work

使用

var a = dbSet.Include(e => e.B).First(e => e.ID == 1); // works

最新更新