0

我是 Entity Framework 的新手,想知道为什么我的外键属性必须是“虚拟的”,即使可以在没有非虚拟外键的情况下加载数据。

可以说我有两节课。两者都有用 virtual 关键字注释掉的行。数据仍然会在没有虚拟的情况下加载。那我们为什么要使用虚拟呢?一旦我们使用 Context.SaveChanges() 添加/更新/删除记录,它会产生影响吗?

public class Application
{
   public int ApplicationID{get;set;}
   public string Name{get;set;}

   //public virtual ICollection<ApplicationPages> Pages{get;set;}
   public ICollection<ApplicationPages> Pages{get;set;}
}

public class ApplicationPages
{
   public int ApplicationPageID{get;set;}
   public string Name{get;set;}

   public int ApplicationID{get;set;}
   [ForeignKey("ApplicationID")]
   public Application Application{get;set;}
   //public virtual Application Application{get;set;}
}
4

1 回答 1

1

据我了解,需要 virtual 关键字才能允许实体框架制作您的类的代理,这有助于延迟加载情况。

我不知道代理变体的详细信息,但我猜它会带回并将子 ID 与父代一起存储。然后,如果您随后访问子属性(除了 id),它有一种获取子记录的有效方法。

我在父级的导航属性方面遇到了麻烦,将它们排除在外,以便在需要时显式加载子记录。但是,我的密钥是两部分(身份证和生效日期),这可能是原因。

于 2013-03-06T16:22:28.313 回答