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