我在EF(.net Core)6中设置一对多关系时遇到麻烦。
我与用户有一张桌子
public class UserDomain{
Id{get;set;}
Name{get;set;}
}
我有一个带有消息的表格,我想跟踪谁看过消息
public class MessageDomain{
Id{get;set;}
Title{get;set;}
Message{get;set;}
List<UserDomain> UsersRead{get;set;}
}
现在,当我添加迁移时,它将在用户表上设置一列,其中包含消息ID的整数。但这不是我想要的。因为这样,每次我将邮件设置为已读时,已读邮件都会切换。
我尝试过
modelBuilder.Entity<MessageDomain>().HasMany(x => x.UsersRead).WithOne().HasForeignKey(x => x.Id);
但是那也不起作用。
为了具有一对多关系,您必须具有该列,该列将成为另一张表的FK。
在您的情况下,如果MessageDomain
需要与许多用户建立关系。您需要在MessageDomainId
类中添加UserDomain
列。 -它也会在数据库中生成该列。
但是那不是我想要的。因为这样,每次我将邮件设置为已读时,已读邮件都会切换。
每次发生时,您都必须更新UserDomain
上的引用
基于对以上答案的评论,您可能需要创建一个附加表。
其中用户将与UserMessages具有一对多关系,然后MessagesDomain将与UserMessages具有一对多关系。
public class UserDomain
{
Id{get;set;}
Name{get;set;}
}
public class UserMessages
{
UserId{get;set;}
MessageId{get;set;}
}
public class MessageDomain{
Id{get;set;}
Title{get;set;}
Message{get;set;}
List<UserDomain> UsersRead{get;set;}
}
然后您将使用UserMessages跟踪哪个用户阅读了哪个消息,然后可以在查询中包括相关表以获取所有数据。