我有一个看起来像这样的课程:
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行,那么我在List中得到200个对象,但是没有一个对象被填充。
我已经确认字段名称与[Column(“name”)]属性中的值不匹配。如果我更改属性名称以匹配结果集中的字段名称,那么它工作正常,但如果我尝试使用数据注释映射它们,我似乎无法使其工作。任何人都可以指出我在这里缺少什么?我确信这很简单。
使用:Visual Studio 2010 Ultimate SP1,.Net 4 SP1,EF 4.2.0(我遇到了与EF 4.3相同的问题)。这只是使用代码完成的,没有使用映射文件。
答案 0 :(得分:8)
看起来,这是记录在案的行为。 Database.SqlQuery Method与DbContext模型配置没有直接联系。
创建一个原始SQL查询,该查询将返回给定泛型的元素 类型。 类型可以是具有与之匹配的属性的任何类型 从查询返回的列的名称,或者可以是简单的 原始类型。
因此,在使用此方法时,应构造sql,使结果集列名与所用类型的属性名匹配。