为什么使用实体框架时,带有数据批注的列无法映射

本文关键字:映射 数据 实体 框架 为什么 | 更新日期: 2023-09-27 18:35:17

>我有一个看起来像这样的类:

public class Analyst
{
    [Column("Internal_ID")]
    public int ID { get; set; } // if this is named like the column, it works
    [Column("DisplayName")]
    public string Name { get; set; }
}

这个对象是这样填充的(下一部分是在继承自 DbContext 的类中):

public List<T> ExecProc<T>(string proc, Dictionary<string, object> params)
{
        var parms = new List<SqlParameter>();
        var sql = new StringBuilder();
        sql.Append(sproc.StoredProcedure);
        sql.Append(" "); //  a space, that's all it is
        foreach (var key in sproc.Parameters.Keys)
        {
            sql.Append(string.Format("{0},", key));
            parms.Add(new SqlParameter(key, sproc.Parameters[key]));
        }
        if (sql[sql.Length - 1] == ',') // removing the trailing ,
        {
            sql.Remove(sql.Length - 1, 1);
        }
        return Database.SqlQuery<T>(sql.ToString(), parms.ToArray()).ToList();
}

返回的 List 包含正确数量的行(在本例中为对象),但所有属性都不填充值。 如果 proc 返回 200 行,那么我在列表中得到 200 个对象,但没有一个填充任何值。

我已经验证了字段名称和 [Column("name")] 属性中的值之间没有不匹配。 如果我更改属性名称以匹配结果集中的字段名称,那么它工作正常,但是如果我尝试使用数据注释映射它们,我似乎无法让它工作。 谁能指出我在这里错过了什么? 我确信这很简单。

使用:Visual Studio 2010 Ultimate SP1,.Net 4 SP1,EF 4.2.0(我在EF 4.3中遇到了同样的问题)。 这一切都是仅使用代码完成的,没有映射文件用于此目的。

为什么使用实体框架时,带有数据批注的列无法映射

看起来,这是记录在案的行为。Database.SqlQuery Method 与 DbContext 模型配置没有直接连接。

创建一个原始 SQL 查询,该查询将返回给定泛型的元素 类型。类型可以是具有与 从查询返回的列的名称,也可以是简单的 基元类型。

因此,使用此方法时,应构造 sql,以便结果集列名与所用类型的属性名匹配。