我正在尝试定义一个包含 <string>
列表或数组的 EF 模型。使用 Add-Migration/Update-Database 该字段不会添加到数据库表中。
我想要的是一个包含逗号分隔的字符串值列表的字段。可能只有一个值,也可能有 10 个或更多:
"Value1, Value2, ..."
我希望能够在我的 MVC5/EF6 Web 应用程序中使用此字段作为 key 。例如:
IEnumerable<Param> params =
from u in _context.Params
where u.MyValues.Contains("Value1")
select u;
我知道这段代码是错误的,但这是我正在尝试的:
public class Param
{
public int Id { get; set; }
public string[] MyValues { get; set; }
}
我的数据库集:
public DbSet<Param> Params { get; set; }
MyValues 字段不会添加到架构中,并且不会引发任何错误。这是种子():
context.Params.Add(c => c.Id, new Param { MyValues = new[] { "Value1, Value2" } });
如何添加一个包含逗号分隔的字符串值列表的字段,然后可以访问/查询该列表?
最佳答案
到目前为止,EF 不支持自定义转换(也许EF 7 会...),因此您必须添加一些管道。
这是我通常做的事情(可能还有其他更好的方法......):
private string myValuesAsString;
[Column("MyValues")]
public string MyValuesAsString
{
get { return myValuesAsString; }
set
{
myValuesAsString = value;
myValues = value.Split(',');
}
}
private string[] myValues;
[NotMapped]
public string[] MyValues
{
get { return myValues; }
set
{
myValues= value;
myValuesAsString = string.Join(",", value);
}
}
未经测试,但您明白了。
如果您不喜欢向业务实体添加公共(public)属性的想法,您可以:
- 从您的 POCO 业务实体继承
- 使用内部属性,但必须使用Fluent API完成映射
- 使用接口(interface)实现完美抽象
关于linq - 在 EF 中定义逗号分隔字符串并与 Linq 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25036810/