時,我有一個類,它看起來像這樣:爲什麼不我與數據註釋地圖列使用實體框架
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();
}
返回的列表中包含的行(或對象的在這種情況下正確的量),但沒有屬性的已填充了的值。如果proc返回200行,那麼我會在列表中獲得200個對象,但沒有任何值填充任何值。
我已驗證字段名稱和[Column(「name」)]屬性中的值之間沒有不匹配。如果我更改屬性名稱以匹配結果集中的字段名稱,那麼它工作正常,但如果我嘗試使用數據註釋映射它們,我似乎無法使其工作。任何人都可以請指出我在這裏錯過了什麼?我確信這很簡單。使用:Visual Studio 2010 Ultimate SP1,.Net 4 SP1,EF 4.2.0(我遇到了與EF 4.3相同的問題)。這全部都是使用代碼完成的,因此沒有使用映射文件。
三年後,這個答案幫了我。我有一個我無法更改的數據模型,但列名不符合我們的命名約定。 在我用於反序列化查詢的POCO中,我爲數據庫中的每個列創建了一個專用字段,並且使用正確命名的屬性創建了一個公共字段,只公開了一個getter方法以返回私有字段中的值。 這可能會在三年後幫助別人。 – Ben
它幫助我在接下來的14個月後:) –