C# 使用实体框架检索逗号分隔的外键表数据
我有一列将用户id保存为逗号分隔的值C# 使用实体框架检索逗号分隔的外键表数据,c#,entity-framework,C#,Entity Framework,我有一列将用户id保存为逗号分隔的值 '32,12,64' 如果可能的话,使用实体框架获取相关表数据的最佳方法是什么,因为在任务的部分类中有[NotMapped]属性,因为维护审核历史记录的触发器不可能将用户id移动到子表。请参阅下面的示例代码 public class Task { public int Id { get;set; } public string UserIds { get;set; } public string UserNames { get;s
'32,12,64'
如果可能的话,使用实体框架获取相关表数据的最佳方法是什么,因为在任务
的部分类中有[NotMapped]
属性,因为维护审核历史记录的触发器不可能将用户id移动到子表。请参阅下面的示例代码
public class Task
{
public int Id { get;set; }
public string UserIds { get;set; }
public string UserNames { get;set; }
}
var task = GetCurrentTask()
foreach(var userId in task.UserIds.Split(','))
{
task.UserNames += GetUserNameFor(userId);
}
在这里,UserIDs字段是字符串,因此,如果您有该字段的值,可以使用LINQ进行查询
var userIDs = "32,12,64";
var result = Usertable.retrieve(x=> x.UserID.Contains(userIDs)).ToList();
这样试试。您可以从用户表中找到结果中包含所有字段值的所有数据。是否希望用户名作为逗号分隔的值?是的。用户名作为逗号分隔的值。目前我们使用触发器捕获表的历史详细信息,因此当使用子表时,我们无法捕获子表的审核历史。严格来说,逗号分隔的值在任何情况下都不是FK,因为您无法保证目标属性是键,该属性上的索引丢失(+无法维护),并且包含约束(FK约束)不存在。如果您想使用它(我强烈建议遵循@marc_的建议并修改您的模式),您可以拆分、解析并使用.Contains(在SQL中)方法;但我已经知道这很快就会中断。但在这种情况下,我如何捕获表行编辑历史的历史?是否可以将其用作任务表部分Classis中的[NotMapped]属性?我尚未尝试使用[NotMapped]属性。所以,我不是很确定,如果对你有效,请尝试一下。