关于关键字和关系的实体框架问题

时间:2013-05-29 10:03:32

标签: entity-framework many-to-many one-to-many fluent

我是EF新学员,我有一些问题要问:

1 我不明白虚拟意味着什么,例如一对多,我举一个例子: 一个问题可以有很多选择,例如。

public class Question
{
    public int QuestionId { get; set; }
    public string Title { get; set; }
    public virtual List<Option> Options { get; set; }
}

public class Option
{
    public int OptionId { get; set; }
    public string OptionText { get; set; }
    public virtual Question Question { get; set; }
}

但“2”虚拟意味着什么,因为如果我删除此行中的virtual:  public virtual List<Option> Options { get; set; },我没有发现任何差异,它适用于一对多,所以你能非常清楚地解释我2 virtual意味着什么,如果它覆盖,覆盖什么?

2 我不知道何时应该使用API​​流利,例如前一个到多个前。没有api流利,它仍然是一对多的关系,所以请告诉我什么时候应该使用它?例如,在哪些场合。

第3 在API流利,我知道“withmany”和“hasmany”在一起,他们的意思是“多对多”,什么是“withrequired?isoptional?”

1 个答案:

答案 0 :(得分:0)

我想我可以回答以下几点:

  1. EF将所有导航属性定义为虚拟,以便EF在运行时创建从您的Brand类派生的新类(动态代理)并使用它。这个新动态创建的类包含第一次访问时加载导航属性的逻辑。此功能称为延迟加载(或更好的透明延迟加载)。
  2. 有关详细信息,请参阅以下链接

    Entity Framework 4.1 Virtual Properties

    2.何时使用流畅的API

    使用Code First时,您可以通过定义域CLR类来定义模型。默认情况下,实体框架使用Code First约定将类映射到数据库模式。如果使用Code First命名约定,在大多数情况下,您可以依赖Code First根据您在类上定义的外键和导航属性来设置表之间的关系。如果在定义类时不遵循约定,或者如果要更改约定的工作方式,则可以使用流畅的API或数据注释来配置类,以便Code First可以映射表之间的关系。

    http://msdn.microsoft.com/en-us/data/jj591620.aspx

    3.参见以下链接,了解什么是.WithRequired和.WithOptional选项

    What part does the .WithRequired play in an EF Fluent API?