0

我正在使用 Entity Framework 从数据库中检索博客数据。我有一个类“BlogPost”和一个类“作者”。一位作者可能有许多博客文章,但作者对象本身并不包含它们的列表。就 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 冗余存储在 BlogPost 对象中以及 Author 对象本身?

4

1 回答 1

1

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

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

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

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

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

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

另请注意,根据 EF 团队的说法,独立关联的性能可能比 FK 关联差得多,尽管这似乎仅限于视图生成,因此这是一次性启动成本(每次启动应用程序或应用程序域时)。此外,对于小型模型,您可能不会注意到它。:

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

编辑:

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

this.HasRequired(t => t.Author).WithMany().Map(m => m.MapKey("AuthorId"));
于 2012-10-14T19:56:04.977 回答