C# 使用实体框架的逗号分隔外键

C# 使用实体框架的逗号分隔外键,c#,entity-framework,ef-code-first,foreign-keys,C#,Entity Framework,Ef Code First,Foreign Keys,我在实体框架中使用代码优先的方法 我使用了两个类:Item和Tag。一个项目可以有多个标签 public class Item { public int ItemId { get; set; } public string Name { get; set; } public List<Tag> Tags { get; set; } } public class Tag { public int TagId { get; set; }

我在实体框架中使用代码优先的方法

我使用了两个类:
Item
Tag
。一个
项目
可以有多个
标签

public class Item
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public List<Tag> Tags { get; set; }
}

public class Tag    
{
    public int TagId { get; set; }
    public int Name { get; set; }
    public Item Item { get; set; }
}
公共类项目
{
公共int ItemId{get;set;}
公共字符串名称{get;set;}
公共列表标记{get;set;}
}
公共类标签
{
public int TagId{get;set;}
公共int名称{get;set;}
公共项项{get;set;}
}
我想将
TagId
作为逗号分隔的值放在
Items
表中


我可以使用外键关联来实现这一点吗?如果是,我如何在使用数据时检索数据?或者请指定替代方法。

您可以将其作为未映射属性公开,即:

public class Item
{
  public int ItemId { get; set; }
  public string Name { get; set; }
  public List<Tag> Tags { get; set; }
  [NotMapped]
  public string TagIds
  {
    set
    {
      if (Tags == null) return null;
      return string.Join(",", Tags.Select(t => t.TagId.ToString).ToArray());
    }
    //get
    //{
       // If you need you can implement this with string.Split and update the Tags
    //}
  }
}
公共类项目
{
公共int ItemId{get;set;}
公共字符串名称{get;set;}
公共列表标记{get;set;}
[未映射]
公共字符串标记ID
{
设置
{
如果(Tags==null)返回null;
返回string.Join(“,”,Tags.Select(t=>t.TagId.ToString.ToArray());
}
//得到
//{
//如果需要,可以使用string.Split和更新标记来实现这一点
//}
}
}

我不知道你是否需要实现get。如果您这样做,您可以使用
string.Split()
int.Parse()
获取新的标记ID,并在数据库中更新它们。

检查它是否有帮助请不要这样做!!天哪,程序员什么时候才能停止这种疯狂行为。。。。。你有一个很好的FK关系-
标记
有一个连接-就用它吧!不要将正确的FK关系破坏成逗号分隔的字符串-下次要加入时,您必须再次“解开”该字符串。。。。。。请严肃地说:不要这样做@marc_s你能解释一下吗?你需要解释一下-你到底为什么要把所有的FK值拼成逗号分隔的字符串?数据库中的每个
标记
都有一个
ItemID
列,该列通过适当的外键关系将其链接到
Item.ItemID
值;.NET运行时中的每个
标记
都有一个它所属的关联
;每个
都有一个与之关联的
标记的列表-您需要另一个逗号分隔的列做什么?重点是什么?我有大约5000个项目,每个项目都有大约3-6个标记,因此您要我在一个表中放置大约5000*6=30000行以进行关联,项目数量也可能会增加。如果我需要基于标签进行搜索,那么放置所有重复的标签是否会导致内存丢失,性能是否会受到影响?