实体框架在同一个表上多对多没有重复记录

时间:2018-02-17 20:02:20

标签: entity-framework entity-framework-6

我正在尝试实现user1和user2之间的通信。 User1可以与许多用户通信,user2也可以与许多用户通信。

我试图避免在交叉表(Chat)中有重复的行。

示例:user1与User2聊天与user2与user1聊天的记录相同。在聊天表中应该只有一个他们的通信记录。

解决这种情况的最佳方法是什么?

我在考虑使用两个用户的复合键在用户和聊天实体之间建立一对多的关系。

我有两个类User.cs和Chats.cs。

public class User
{
    public long Id { get; set; }
    public ICollection<Chat> Chats { get; set; }
}

public class Chat
{
    public User User { get; set; }
    public long UserId1 { get; set; }
    public long UserId2 { get; set; } 
}

// chatconfigure

public static void Configure(EntityTypeConfiguration<Chat> entity)
{
    entity.HasKey(c => new { c.UserId1, c.UserId2 });
    entity.HasRequired(s => s.User)
          .WithMany(d => d.Chats)
          .HasForeignKey(s => new { s.UserId1, s.UserId2 });
}

错误:

  

在模型生成期间检测到一个或多个验证错误:

     

Chat_User_Source:多重性在角色&#39; Chat_User_Source&#39;中无效。在关系&#39; Chat_User&#39;。由于“从属角色”是指关键属性,因此“从属角色”的多重性的上限必须为“&#39; 1”。   Chat_User_Target_Chat_User_Source ::关系约束中的从属角色和主要角色中的属性数必须相同。

0 个答案:

没有答案