Entity framework 实体框架(代码优先)-一对多关系
我在EF(.net Core)6中设置一对多关系时遇到问题 我有一张有用户的桌子Entity framework 实体框架(代码优先)-一对多关系,entity-framework,entity-framework-core,ef-code-first,Entity Framework,Entity Framework Core,Ef Code First,我在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;se
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;}
}
公共类MessageDomain{
Id{get;set;}
标题{get;set;}
消息{get;set;}
List UsersRead{get;set;}
}
现在,当我添加迁移时,它会在用户表上设置一列,其中包含消息id的整数。但这不是我想要的。因为每次我将消息设置为已读时,读取消息都会切换
我试过了
modelBuilder.Entity<MessageDomain>().HasMany(x => x.UsersRead).WithOne().HasForeignKey(x => x.Id);
modelBuilder.Entity().HasMany(x=>x.UsersRead).WithOne().HasForeignKey(x=>x.Id);
但这也不起作用。为了建立一对多关系,您必须拥有该列,该列将是另一个表的FK 在您的情况下,if
MessageDomain
需要与多个用户建立关系。
您需要在UserDomain
类中添加MessageDomainId
列它还将在数据库中生成该列
但这不是我想要的。因为每次我将消息设置为已读时,读取消息都会切换
每次发生这种情况时,您必须更新
UserDomain
上的引用,为了建立一对多关系,您必须将该列作为另一个表的FK
在您的情况下,ifMessageDomain
需要与多个用户建立关系。
您需要在UserDomain
类中添加MessageDomainId
列它还将在数据库中生成该列
但这不是我想要的。因为每次我将消息设置为已读时,读取消息都会切换
每次发生这种情况时,您都必须更新
UserDomain
上的引用,根据上面对答案的评论,您可能需要创建一个额外的表
public class UserDomain
{
Id{get;set;}
Name{get;set;}
List<UserMessages> ReadMessages{get;set;}
}
public class UserMessages
{
UserId{get;set;}
MessageId{get;set;}
MessageDomain MsgDomain{get;set;}
UserDomain UserDomain{get;set;}
}
public class MessageDomain{
Id{get;set;}
Title{get;set;}
Message{get;set;}
List<UserMessages> ReadBy{get;set;}
}
公共类用户域
{
Id{get;set;}
名称{get;set;}
列出读取消息{get;set;}
}
公共类用户消息
{
用户标识{get;set;}
MessageId{get;set;}
MessageDomain MsgDomain{get;set;}
用户域用户域{get;set;}
}
公共类消息域{
Id{get;set;}
标题{get;set;}
消息{get;set;}
列表ReadBy{get;set;}
}
然后,您将使用UserMessages跟踪哪个用户阅读了哪个消息,然后您可以在查询中包含相关表以获取所有数据。根据上面答案上的注释,您可能需要创建一个附加表
public class UserDomain
{
Id{get;set;}
Name{get;set;}
List<UserMessages> ReadMessages{get;set;}
}
public class UserMessages
{
UserId{get;set;}
MessageId{get;set;}
MessageDomain MsgDomain{get;set;}
UserDomain UserDomain{get;set;}
}
public class MessageDomain{
Id{get;set;}
Title{get;set;}
Message{get;set;}
List<UserMessages> ReadBy{get;set;}
}
公共类用户域
{
Id{get;set;}
名称{get;set;}
列出读取消息{get;set;}
}
公共类用户消息
{
用户标识{get;set;}
MessageId{get;set;}
MessageDomain MsgDomain{get;set;}
用户域用户域{get;set;}
}
公共类消息域{
Id{get;set;}
标题{get;set;}
消息{get;set;}
列表ReadBy{get;set;}
}
然后,您将使用UserMessages跟踪哪个用户阅读了哪个消息,然后您可以在查询中包含相关表以获取所有数据。可能问错了,但我有多条消息,希望知道哪个用户查看了消息。通过在userDomain中添加MessageDomainId,我只能跟踪1条消息(该列中的id)。可能询问错误,但我有多条消息,希望知道哪个用户查看了该消息。通过在userDomain中添加MessageDomainId,我只能跟踪1条消息(该列中的id)。