【问题标题】:Adding DateTime field to many-to-many EF Code First relationship将 DateTime 字段添加到多对多 EF Code First 关系
【发布时间】:2014-03-04 06:18:00
【问题描述】:

我使用的是 EF 6 Code-First,每种类型都有一个表,并且我有两个具体的类 GroupUserGroup 有一个导航属性Members,其中包含User 的集合。我已经使用 Fluent 语法在 EF 中映射了这种多对多关系:

modelBuilder.Entity<Group>
    .HasMany<User>(g => g.Members)
    .WithMany(u => u.Groups);

我想知道什么时候一个成员加入了一个组,这样我就可以查询最新的成员。我不确定如何在框架内最好地实现这一点。

我看到以下选项:

  1. 创建和使用审计表(即GroupMembershipAudit,包括GroupUser、加入/取消加入和DateTime
  2. UserGroup 之间的自动生成的多对多表中添加一列

在 EF 中是否有任何东西可以促进这种多对多历史信息的存储/将列附加到多对多关系?

【问题讨论】:

    标签: entity-framework ef-code-first many-to-many fluent


    【解决方案1】:

    在用户和用户之间自动生成的多对多表中添加一列 组

    这是不可能的 - 自动生成的联结表只能包含键(称为纯联接表)。根据Working with Many-to-Many Data Relationships 文章:如果连接表包含不是键的字段,则该表不是 PJT,因此实体框架无法在表之间创建直接导航(多对多)关联。 (带有非键字段的联接表也称为带有负载的联接表。)

    创建和使用审计表(即 GroupMembershipAudit 由 组、用户、加入/取消加入和日期时间

    实际上你应该创建GroupMembershipAudit 实体。使用 Code First 会生成表,您无需手动创建。

    【讨论】:

    • 感谢 Sergey - 我不确定 EF 中是否有任何神奇的东西可以促进多对多表的历史记录,现在我知道没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-20
    相关资源
    最近更新 更多