linq - 在 EF 中定义逗号分隔字符串并与 Linq 一起使用

标签 linq entity-framework

我正在尝试定义一个包含 <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/

相关文章:

c# - 使用存储库模式与 Entity Framework 一起使用的自动映射器?

linq - NHibernate LINQ 在 Where() 子句中支持 ToLower() 吗?

c# - C# 中的 LINQ to XML。枚举没有结果?

c# - 在 ASP.NET 5 中访问中间件中的 DbContext

c# - 如何在 Visual Studio 中启动并运行 SQLite?

.net - Entity Framework -是否可以在EDMX设计器中对属性进行重新排序?

LINQ OrderBy 对内部对象的属性

c# - 我可以在同一参数中同时接受委托(delegate)类型 T 和 Expression<T> 吗?

c# - 非泛型 AsEnumerable

c# - MVC 5 : Should I inherit my User from IdentityUser class?