Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 关于关键字和关系的实体框架问题_Entity Framework_Many To Many_One To Many_Fluent - Fatal编程技术网

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

Entity framework 关于关键字和关系的实体框架问题,entity-framework,many-to-many,one-to-many,fluent,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 {

我是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; }
}
公开课问题
{
public int QuestionId{get;set;}
公共字符串标题{get;set;}
公共虚拟列表选项{get;set;}
}
公共类选项
{
public int OptionId{get;set;}
公共字符串OptionText{get;set;}
公共虚拟问题{get;set;}
}
但是“2”虚拟是什么意思,因为如果我删除此行中的
virtual
public virtual List Options{get;set;}
,我没有发现任何差异,它是一对多的,因此您能否非常清楚、轻松地解释2
virtual
的含义,如果是override,override是什么

2. 我不知道我们什么时候应该使用API fluent,例如,之前的一对多ex。没有API fluent,它仍然是一对多关系,所以请告诉我我们什么时候应该使用它?比如在什么场合

3.
在API fluent中,我知道“withmany”和“hasmany”一起表示“多对多”,什么是“withrequired?isoptional?”

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

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

    2.何时使用fluent API

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

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