Has*_*aan 1 c# asp.net entity-relationship entity-framework entity-framework-5
我是Entity Framework的初学者.我有一些条款会产生问题.我正在考虑代码优先架构
通过在父类中创建子类的属性来解决1对1,在子类中,我们将父类的id标记为外键.
喜欢
public class Parent{
//code
public Child Child{get; set;}
}
public class Child{
[ForeignKey("Parent")]
public int ParentId{get; set;}
}
Run Code Online (Sandbox Code Playgroud)一个1对多的关系,我们使用
public class Parent {
//code
public IList<Child> Child { get; set; }
}
public class Child {
[ForeignKey("Parent")]
public int ParentId{get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这是正确的方法吗?
\*-\*通过IList<class>在两个类中添加来解决.
但我解决问题,我有2班Categories和Products.
在Product类中,属性定义为
public class Products {
public virtual Category Category { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在Category课堂上,产品以这种方式被调用
public class Categories {
public virtual ICollection<Product> Products { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我很困惑virtual Category产品的目的是什么?
有人回答请解决我的困惑
正如其他人在评论中指出的那样,EF使用virtual关键字来启用延迟加载.它的方式是使用所谓的动态代理.
如果您正在调试,您可能会注意到您的实体类型不是您认为的那样:
代理类型的名称如下所示:System.Data.Entity.DynamicProxies .Blog_5E43C6C196972BF0754973E48C9C941092D86818CD94005E9A759B70BF6E48E6
实体框架看到您的实体具有虚拟关键字,并将通过从您的类继承并覆盖标记为虚拟的属性来创建动态代理,以便为这些属性启用延迟加载.
正如我链接到的msdn中所提到的,当您使用new关键字创建实体实例时,您将无法获得动态代理(因此不会延迟加载):
var blog1 = new Blog(); // not a dynamic proxy
var blog2 = db.Blogs.Create(); // this is a dynamic proxy
var blog3 = db.Blogs.Find(1); // this is a dynamic proxy
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1348 次 |
| 最近记录: |