【问题标题】:Custom POCO-Objects to table自定义 POCO 对象到表
【发布时间】:2012-03-25 14:52:54
【问题描述】:

目前我使用继承的包含 ​​DbSet 成员的 DbContext-Classes 将 POCO 对象存储到数据库中。这适用于“编译时已知”类及其结构。

现在我有一个类似的课程

public class ResourceSet
{
    public long Id
    {
        get;
        set;

    }
    public long OwnerId
    {
        get;
        set;
    }

    public double[] Resources
    {
        get;
        set;
    }
}

并希望将其存储到数据库方案中:

Id, OwnerId, Res_1, Res_2, Res_3, ...(取决于资源的大小,将在程序启动时固定)。

  • 目前我使用的是EFCodeFirst的CTP5
  • DbSet 当然会失败。它不支持索引属性。
  • 我想避免使用 .edmx 文件

我的问题:

是否可以创建一个代理/包装器/转换类,它将资源数组映射到 Res_X 列。您在文档中是否有提示我可以从哪里开始?

搜索“Id”和“OwnerId”的LINQ 应该仍然可以,对于资源,它不是必需的。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-4


    【解决方案1】:

    如果在 Linq 查询中永远不需要 Resources,您可以将其映射到字符串支持属性,然后将其保存回数据库中。

    public double[] Resources
    {
        get
        {
            var result = from r in ResourceString.Split(new string[] {";"}, StringSplitOptions.RemoveEmptyEntries)
                         select double.Parse(r);
    
            return result.ToArray();
        }
        set
        {
    
            ResourceString = string.Empty;
            foreach (var d in value)
            {
                ResourceString += d + ";";
            }
        }
    }
    
    private string ResourceString
    {
        get;
        set;
    }
    

    如果您将实体框架更新到最新版本(通过 NuGet)并将资源指定为未映射,则一切都应该正常工作。

    【讨论】:

    • ResourceString 应该是要映射的public,不是吗?
    • 相当聪明的解决方案!谢谢提示。但我想将值作为列...我想我会直接使用 DbConnection 来解决这个问题并跳过 EF。或者有没有更聪明的方法,避免创建Sql-Statements
    猜你喜欢
    • 2011-04-14
    • 2018-05-09
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    相关资源
    最近更新 更多