这个问题困扰了我一段时间,希望得到任何帮助
假设我有两个类,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);
我相信答案很简单,我只是不太擅长实体。任何帮助将不胜感激。
谢谢
最佳答案
User
和 Room
之间有两种关系:
- 用户是所有者的房间(
一对多
) - 用户是成员的房间(
多对多
)
单个 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/