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行以进行关联,项目数量也可能会增加。如果我需要基于标签进行搜索,那么放置所有重复的标签是否会导致内存丢失,性能是否会受到影响?