C# 实体框架6不';如果父对象具有所有虚拟属性,则不保存导航对象(状态不变)

C# 实体框架6不';如果父对象具有所有虚拟属性,则不保存导航对象(状态不变),c#,entity-framework-6,virtual,C#,Entity Framework 6,Virtual,我有以下课程: 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] publ

我有以下课程:

 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");
var context=newmodel1();
var dbSet=context.Set();
var dbSet1=context.Set();
var a=数据库集查找(1);
VarB=a.b;
b、 title=DateTime.Now.Ticks.ToString();
int changes1=context.SaveChanges();
if(changes1==0)
抛出新异常(“未更新”);
如果我从A类中的属性ID中删除“virtual”,一切都正常。我需要虚拟财产,以便在nhibernate中使用模型


谢谢

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

我可以建议两种解决方法。(1)在编辑导航属性之前,将所有
B
成员
虚拟
,或(2)快速加载(延迟和显式加载不起作用)

i、 e.代替

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


为什么希望密钥属性是虚拟的?virtual允许您重写实现,并允许EF延迟加载您的属性。我想对于一个关键属性来说,这没有多大意义。
var a = dbSet.Include(e => e.B).First(e => e.ID == 1); // works