我正在尝试定义包含<string>
列表或数组的EF模型。使用Add-Migration / Update-Database,该字段不会添加到数据库表中。
我想要的是一个包含以逗号分隔的字符串值列表的字段。可能只有一个值,或者可能有10个或更多:
"Value1, Value2, ..."
我希望能够在我的MVC5 / EF6 Web应用程序中使用此字段作为密钥。例如:
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; }
}
我的DbSet:
public DbSet<Param> Params { get; set; }
MyValues字段未添加到架构中,并且没有抛出任何错误。这是Seed():
context.Params.Add(c => c.Id, new Param { MyValues = new[] { "Value1, Value2" } });
如何添加一个包含逗号分隔的字符串值列表的字段,然后可以对其进行访问/查询?
答案 0 :(得分:2)
截至目前,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);
}
}
未经测试,但您明白了。
如果您不想将公共属性添加到您的业务实体,您可以: