0

我首先遇到了 EF5 代码的表创建问题。我将演示两个案例及其输出。我想知道它们之间的区别以及我如何才能成功实现我的目标。

情况1

public class User{

public int ID { get; set; }

public string Name { get; set; }

public ICollection<UserMessage> Messages { get; set; }

}

public class UserMessage{

public int ID { get; set; }

public string Message { get; set; }   

public User CreatedBy { get; set; }

public ICollection<User> PermittedUsers {get; set;}

}

现在,在这种情况下,实体框架仅生成 User 和 UserMessage 类,它们仅通过 User 中的 UserMessage_ID 和 UserMessage 中的 CreatedBy_ID 相互绑定。

我很好奇的问题就在这里。每当我创建新消息时,EF5 将如何识别允许的用户?是否会为每个允许的用户复制相同的消息?或者是什么?

案例2

public class User{

public int ID { get; set; }

public string Name { get; set; }

public ICollection<UserMessage> Messages { get; set; }

}

public class UserMessage{

public int ID { get; set; }

public string Message { get; set; }   

public ICollection<User> PermittedUsers {get; set;}

}

在这种情况下,我只删除了 UserMessage 实体中的 CreatedBy。现在 EF5 生成 3 个表,分别命名为:User、UserMessage、UserMessageUsers。UserMessage 和 User 之间的链接现在通过 UserMessageUsers 进行,以便我们可以轻松管理允许的用户。

如何在不破坏案例 2 的情况下将 CreatedBy 属性添加到 UserMessage 中?

4

1 回答 1

0

您可以使用 fluent api 对其进行配置:

modelBuilder.Entity<UserMessage>()
    .HasMany(d=>d.PermittedUsers)
    .WithMany(d=>d.Messages)
    .Map(c=>c.ToTable("UserMessageUsers"));
于 2012-11-11T17:12:14.877 回答