详情
我在ASP.NET MVC Core 2.0
项目上工作。
我有一个主题MVC对象,我存储了创建该主题的用户的ID,并希望存储可以编辑该主题的用户。
逻辑上我应该存储可以编辑主题的用户的ID。
这就是问题所在。
问题
如何存储带有映射到EF的字符串的用户ID?
无法存储 List<string>
或string[]
,因为EF无法映射这些类型的集合。
示例用户ID:a77-95471b9f597d(顺便说一下,这是ASP.NET项目的默认ApplicationUser
。)
此外:一个用户可以拥有更多主题ID,一个主题可以拥有更多用户ID
我已经认为将所有ID存储在一个简单的字符串中,用任何类型的符号(例如:分号)将它们分开,但是有一个问题:一个简单的字符串可以有多长时间,我有一个答案我读过:
这是其中一种情况,[“如果你不得不问,你是 可能做错了。“]就是这样。
答案 0 :(得分:2)
讽刺和无益,但准确。这是典型的m:m场景。
public class Topic {
public int TopicId { get; set; }
// other topic stuff
public virtual User Owner { get; set; }
public virtual ICollection<Collaboration> Collaborators { get; set; }
}
public class User {
public int UserId { get; set; }
// other user stuff
public virtual ICollection<Collaboration> Collaborators { get; set; }
}
public class Collaboration {
public int CollaborationId { get; set; }
// other stuff dependent on topic + user
public int UserId { get; set; }
public virtual User User { get; set; }
public int TopicId { get; set; }
public virtual Topic Topic { get; set; }
}
所有可以编辑(协作)主题的用户。 db = EF上下文
db.Topics.Include("Collaborators").Include("Collaboration.User").FirstOrDefault(p => p.TopicId == <key value>);
用户可以编辑的所有主题
db.Users.Include("Collaborators").Include("Collaboration.Topic").FirstOrDefault(p => p.UserId == <key value>);
这是一种关系模型。协作是主题和用户之间关系的“连接表”。协作中有一条记录,用于主题和用户的每个交集。在主题中,还有一个所有者(单个用户),它是主题所有者的1:m。