C# 实体框架中的映射?
在观看一些实体框架教程时,我发现有很多方法可以在两个实体之间创建关系。但我很难理解这些台词的确切含义C# 实体框架中的映射?,c#,.net,entity-framework,C#,.net,Entity Framework,在观看一些实体框架教程时,我发现有很多方法可以在两个实体之间创建关系。但我很难理解这些台词的确切含义 public virtual Person person { set; get; } public virtual IEnumerable<Person> person { set; get; } public virtual ICollection<Person> person { set; get; } 公共虚拟人{set;get;} 公共虚拟IEnumerab
public virtual Person person { set; get; }
public virtual IEnumerable<Person> person { set; get; }
public virtual ICollection<Person> person { set; get; }
公共虚拟人{set;get;}
公共虚拟IEnumerable person{set;get;}
公共虚拟ICollection person{set;get;}
在其中一个视频中,他们解释说,当您同时创建虚拟属性和ICollection
时,这将启用延迟加载
在这个实例中,virtual关键字做了什么?如果我们在没有virtual关键字的情况下尝试,会发生什么?EF需要将类实现为virtual,因为代理在运行时被创建为继承的类。延迟加载引擎所做的是在后台重新实现(覆盖)这些属性,以便按预期工作。关键字正好做到了这一点:允许其他类重写其实现。这就是为什么如果您希望启用延迟加载并工作,就需要这些虚拟属性的基本原因 您会注意到,当启用延迟加载时,您在运行时获得的输入的名称很奇怪,如“Person_proxy9873216546697987465449” 关于关系,每当您在数据库中创建一个具有1:N关系的实体时,您可以拥有一个集合,该集合将自动列出其关系,因此您可以在代码中使用它,如本例所示,假设“Person 1:N Orders”:
var ordersFromSomePerson=person.Orders代码>为了回答为什么虚拟ICollection在EF中启用延迟加载的问题,我们需要C#中virtual关键字的定义和含义。发件人:
从概念上讲,它是继承机制的一部分
通常情况下,子类需要另一个(扩展的)功能作为基类。在这种情况下,virtual关键字允许程序员重写(如果需要,当前实现的基类的默认实现,但所有其他预定义方法/属性/等仍然取自基类
一个简单的例子是:
// base digit class
public class Digit
{
public int N { get; set; }
// default output
public virtual string Print()
{
return string.Format("I am base digit: {0}", this.N);
}
}
public class One : Digit
{
public One()
{
this.N = 1;
}
// i want my own output
public override string Print()
{
return string.Format("{0}", this.N);
}
}
public class Two : Digit
{
public Two()
{
this.N = 2;
}
// i will use the default output!
}
创建两个对象并调用“打印”时:
var one = new One();
var two = new Two();
System.Console.WriteLine(one.Print());
System.Console.WriteLine(two.Print());
输出为:
1
I am base digit: 2
EF中的延迟计算不是来自虚拟关键字direct,而是来自关键字启用的覆盖可能性(同样来自延迟加载):
当预定义的方法被重写时,程序员可以启用延迟加载
1
I am base digit: 2
When using POCO entity types, lazy loading is achieved by creating
instances of derived proxy types and then overriding virtual
properties to add the loading hook.