c# - 当我需要多个相同类型的关系时 Entity Framework 出现问题

标签 c# sql entity-framework

这个问题困扰了我一段时间,希望得到任何帮助

假设我有两个类,users 和 room,基本上是这样的

public class User
{
    [Key]
    public int UserId {get; set;}
    public string Username {get; set;}
    public virtual List<Room> Rooms {get; set;}
}

public class Room
{
    [Key]
    public int RoomId {get; set;}
    [ForeignKey("Owner")] // have tried with and without the explicit relationship
    public int OwnerId {get; set;}
    public User Owner {get; set; }
    public virtual List<User> Members {get; set;}
}

我希望构建的结构允许用户拥有多个房间,他们是所有者,但也可以作为成员加入多个房间。

当我实际尝试创建房间并添加成员时,问题就来了。添加了所有者属性,但成员列表始终为空。

我正在使用注解API,但也尝试过流畅的API

当我尝试这样做时,出现多重错误

 modelBuilder.Entity<Room>()
                .HasMany(t => t.Members).WithMany(u => u.Rooms);

我相信答案很简单,我只是不太擅长实体。任何帮助将不胜感激。

谢谢

最佳答案

UserRoom 之间有两种关系:

  • 用户是所有者的房间(一对多)
  • 用户是成员的房间(多对多)

单个 Rooms 集合不能表示这两种关系,您需要两个集合:

public class User
{
    [Key]
    public int UserId {get; set;}
    public string Username {get; set;}
    public virtual List<Room> OwnerOfRooms {get; set;}
    public virtual List<Room> MemberOfRooms {get; set;}
}

并使用以下 Fluent 配置:

modelBuilder.Entity<User>()
    .HasMany(u => u.OwnerOfRooms)
    .WithRequired(r => r.Owner)
    .HasForeignKey(r => r.OwnerId);

modelBuilder.Entity<User>()
    .HasMany(u => u.MemberOfRooms)
    .WithMany(r => r.Members);

请注意,第二个关系将创建自动联结表 UserRooms

关于c# - 当我需要多个相同类型的关系时 Entity Framework 出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40370892/

相关文章:

c# - MVC Controller if/else 语句

c# - WCF 和 Entity Framework ,隐藏列/实体属性

c# - PBI (Power BI) 服务不支持的 System.Object 类型

sql - 基于 SQL Server 中多个先前行的值提取行

c# - 有SIMD指令集的宏吗?

jquery - SQL 不在长时间响应中

sql - 插入表中包含 BigQuery 中的重复记录

c# - 使用 EntityFramework 在 MVC 中以 JSON 形式返回具有导航属性的实体的最佳实践

c# - Visual Studio 连接字符串- 相对文件路径?

c# - 在c#中将数据gridview中的图像获取到图片框