當我通過使用額外的部分類將額外屬性添加到EF自動生成的類時,這些屬性在對數據庫運行查詢時未填充或填充。實體框架的額外屬性未由DbContext.Database.SqlQuery填充
例子:
自動生成的類人:
public partial class Person
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
我自己的部分類
public partial class Person
{
public string DisplayName{ get; set; }
}
當我做下面的查詢:
"SELECT *, (FirstName + LastName) AS DisplayName FROM [Person]"
和使用
DbContext.Database.SqlQuery(typePerson, SQL, null)
Id,FirstName和LastName被填充,但不是DisplayName。
然而,當我創建一個名爲MyPerson
public partial class MyPerson
{
public string Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string DisplayName{ get; set; }
}
一個全新的類並運行的顯示名稱填充以及MyPerson的類型相同的查詢。
任何人都可以解釋這個或告訴我如何解決這個問題,所以我可以使用部分,而不必創建新的類/類型。
下載一個例子:https://www.dropbox.com/s/dayrv0jzuoju9q3/StackOverflow_EF_ExtraProperties.zip?dl=0
更新2015年12月28日: 在閱讀通過其他計算器和CodeProject上論壇,我找到了另外的方式來得到它的工作:
1)使用Typebuilder( http://www.codeproject.com/Articles/206416/Use-dynamic-type-in-Entity-Framework-SqlQuery),但由於各種項目依賴性,我發現已經創建的類型並沒有炸燬內存;
2)迄今爲止的最佳選擇:使用繼承。
當我創建只是這行其他類:
class Person_Reflect : Person { }
我可以使用下面的代碼(它會忽略在EDMX文件和使用反射的映射:
List<EF.Person> listPerson = dbEntities.Database.SqlQuery<EF.Person_Reflect>(sql, new object[] { }).ToList<EF.Person>();
你確定'Person'的第二部分類是在正確的命名空間中? –
自從您更改模型後,沒有例外嗎? – dotctor
你是否將DisplayName看作一個沒有價值的屬性? –