【问题标题】:Many to many relationship with entity framework code first多对多关系优先与实体框架代码
【发布时间】:2012-08-22 16:48:12
【问题描述】:

我有以下实体:

public class User : EntityBase
{
    [Required]
    [Key]
    public Guid Id { get; set; }
    public virtual ICollection<BlogEntry> BlogEntries { get; set; }
    public virtual ICollection<BlogEntry> [Name?] { get; set; } // User favourite blog entries
}

public class BlogEntry : EntityBase
{
    [Required]
    [Key]
    public Guid Id { get; set; }
    public virtual User User { get; set; }
    public virtual ICollection<User> [Name?] { get; set; } // Users who favourites blog entry
}

CREATE TABLE [dbo].[Favourites](
[BlogEntry_Id] [uniqueidentifier] NOT NULL,
[User_Id] [uniqueidentifier] NOT NULL,
)

如果我要遵循 EF 代码优先命名约定,那么在这两种情况下应该使用什么属性名称?收藏夹表的名称也应该是 UserFavourites?

如果问题与 ICollection 的命名无关,我应该如何指示 EF 从收藏夹表中加载收藏 BlogEntry 的用户列表和用户收藏的 BlogEntrie 列表?

【问题讨论】:

  • 多方的名字无所谓。 EF 查看ICollection 的类型。因此,也许您应该改写您的问题,因为我认为“正确”命名 ICollection 不会解决您的问题;-)

标签: entity-framework ef-code-first entity-framework-5


【解决方案1】:

当您使用 Code First 时,您不应该自己创建表:让框架为您完成。

只需在BlogEntry 中创建一个ICollection&lt;User&gt; 属性,在用户实体中创建一个ICollection&lt;BlogEntry&gt;。首先,从BlogEntry 中省略User 属性。然后,Entity Framework 将为您创建联结表“UsersBlogEntries”。

当然,它还有更多内容,但这应该可以帮助您入门。 SO 充满了关于这个主题的优秀答案。

【讨论】:

  • 但是..如果我有一个预先存在的数据库,应该如何用属性(或流畅的 api)表达这种关系?
  • @Marc 正如我所说,SO 本身有很多优秀的例子。可以在msdn.microsoft.com/en-us/data/hh134698.aspx 找到全面的讨论
  • @Marc 或者,您可以定义两个一(用户,博客条目)到多(收藏夹)关系。这还有一个额外的好处,您可以将除 UserID 和 BlogEntryID 之外的列添加到收藏夹表中(例如 Rating)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 2013-03-17
  • 2011-08-16
  • 1970-01-01
  • 2013-02-26
  • 2013-03-14
  • 1970-01-01
相关资源
最近更新 更多