是否使用POCO将虚拟类型与外键一起使用?

时间:2013-03-06 14:07:44

标签: entity-framework-4.3

我是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;}
}

1 个答案:

答案 0 :(得分:1)

据我了解,虚拟关键字是必需的,允许Entity Framework为您的类创建代理,这有助于延迟加载。

我不知道代理变体的细节,但我猜它会带回来并将子id与父代一起存储。然后,您随后访问子属性(除id之外),它有一种有效的方式来获取子记录。

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