在ASP.NET中使用EF存储字符串集合

时间:2018-06-11 18:00:50

标签: c# asp.net entity-framework

详情

我在ASP.NET MVC Core 2.0项目上工作。 我有一个主题MVC对象,我存储了创建该主题的用户的ID,并希望存储可以编辑该主题的用户。

逻辑上我应该存储可以编辑主题的用户的ID。

这就是问题所在。

问题

如何存储带有映射到EF的字符串的用户ID? 无法存储 List<string>string[],因为EF无法映射这些类型的集合。

示例用户ID:a77-95471b9f597d(顺便说一下,这是ASP.NET项目的默认ApplicationUser。)

此外:一个用户可以拥有更多主题ID,一个主题可以拥有更多用户ID

我已经认为将所有ID存储在一个简单的字符串中,用任何类型的符号(例如:分号)将它们分开,但是有一个问题:一个简单的字符串可以有多长时间,我有一个答案我读过:

  

这是其中一种情况,[“如果你不得不问,你是   可能做错了。“]就是这样。

1 个答案:

答案 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。