2016-09-16 63 views
0

关系我继承了一个项目,所有的一个以这种方式一个一对多的实体框架没有FK

[Table("A")] 
public partial class A 
{ 
    public int Id { get; set; } 
    public int Something {get; set; } 

    public virtual ICollection<B> B { get; set; } 

} 

[Table("B")] 
public partial class B 
{ 
    [Key] 
    public int Id { get; set; } 
    public int Something {get; set; } 

    [Required] 
    public virtual A A { get; set; }  
} 

让我大吃一惊的是缺乏在一个INT外键财产创造了很多关系B型号。 实体框架必须创建它,因为它们存在于我们的数据库中。

任何人都可以解释第一个为什么发生这种情况,两个,如果这可能导致延迟加载问题?

回答

0

EntityFramework在默认情况下会查找名称“id”并将其作为关键字。你可以指定装饰使其更快,因为它不必猜测表的关键。

我不相信它会影响延迟加载,因为延迟加载是通过创建派生代理类型的实例,然后重写虚拟财产增加装载钩

来源实现:
Microsoft Key
Microsoft Lazy Loading

+0

是的,但这就是桌子上的Primery Keys,我指的是FK,我应该在表B中公开一个AId属性。 – Andy

0

EF不需要外键属性。 EF可以建立基于对象关系的隐藏域(我通常使用这种配置,因为我认为更多的是POCO)。唯一的问题是,在某些情况下,验证或SaveChanges中引发的异常更隐蔽,否则一切正常。

关于外键列名称,您可以使用流畅的api(Map + MapLeftKey,MapRightKey和MapKey方法)配置它们。