繁体   English   中英

实体框架-子对象中的外键

[英]Entity Framework - Foreign key in sub-object

我正在使用Entity Framework从数据库中检索博客数据。 我有一个类“ BlogPost”和一个类“ Author”。 一个作者可能有许多博客文章,但是Author对象本身不包含它们的列表。 就Author对象而言,它独立于所有博客文章。

Author类的实例作为属性包含在BlogPost中。 每个作者都有一个AuthorId。 我想从数据库中提取给定的博客,并用相关数据填充Author对象。 通过使用以下代码映射对象,我在BlogPost类中包括了AuthorId属性,从而设法做到了这一点:

this.HasRequired(t => t.Author).WithMany().HasForeignKey(x => x.AuthorId);

但是,我想做的是能够执行相同的操作,而不必在模型中直接包含AuthorId属性。 原因是,由于Author对象已经包含核心响应ID,因此我将同一条信息重复两次。 我想按照以下方式做一些事情:

this.Property(t => t.Author.Id).HasColumnName("id_user");
this.HasRequired<TwitterUser>(t => t.Author).WithMany().HasForeignKey(t => t.Author.Id);

因此,有什么方法可以检索Author子对象,而不必将AuthorID冗余地与Author对象本身一起存储在BlogPost对象中?

您使用的语法称为“外键关联”,是EF 4中引入的语法,因为它解决了许多问题。 例如,使用FK关联时,您可以自动执行级联删除。

您可以在这里阅读有关它们的更多信息:

http://blogs.msdn.com/b/efdesign/archive/2009/03/16/foreign-keys-in-the-entity-framework.aspx

您仍然可以使用简单的导航属性以旧的方式进行操作。 但是您将需要稍微不同的语法。 一件事是,独立的关联关系要求您在两端都具有导航属性,而您说过只希望这种方式。 因此,您要么将关联添加到Author实体,要么使用FK关联。

您可能还会发现我们自己的Ladislav Mrnka的这篇文章很有用:

http://www.ladislavmrnka.com/2011/05/foreign-key-vs-independent-associations-in-ef-4/

还要注意,根据EF团队的说法,独立联合会的表现要比FK联合会差很多,尽管这似乎仅限于View Generation,所以这是一次性的启动成本(每次启动应用程序或应用程序域时)。 另外,对于小型模型,您可能不会注意到它。

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

编辑:

正如@Slauma指出的那样,您可以使用.Map属性来映射独立的关联,如下所示:

this.HasRequired(t => t.Author).WithMany().Map(m => m.MapKey("AuthorId"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM