我有方法,看起來像這樣:如何解決查詢中的NotMapped屬性?
private static IEnumerable<OrganizationViewModel> GetOrganizations()
{
var db = new GroveDbContext();
var results = db.Organizations.Select(org => new OrganizationViewModel
{
Id = org.OrgID,
Name = org.OrgName,
SiteCount = org.Sites.Count(),
DbSecureFileCount = 0,
DbFileCount = 0
});
return results;
}
這是返回結果非常及時。
但是,您會注意到OrganizationViewModel必須使用設置爲「0」的屬性。組織模型中有屬性,我通過部分類添加並使用[NotMapped]:UnsecureFileCount和SecureFileCount進行裝飾。
如果我改變那些0到一些有用的東西......
DbSecureFileCount = org.SecureFileCount,
DbFileCount = org.UnsecureFileCount
...我得到的「只有初始化,實體成員和實體導航屬性都支持」異常。我覺得這有點令人困惑,因爲我不覺得我在詢問數據庫,我只是設置視圖模型的屬性。
然而,由於EF是不聽我的論點我嘗試了不同的方法:
private static IEnumerable<OrganizationViewModel> GetOrganizations()
{
var db = new GroveDbContext();
var results = new List<OrganizationViewModel>();
foreach (var org in db.Organizations)
{
results.Add(new OrganizationViewModel
{
Id = org.OrgID,
Name = org.OrgName,
DbSecureFileCount = org.SecureFileCount,
DbFileCount = org.UnsecureFileCount,
SiteCount = org.Sites.Count()
});
}
return results;
}
從技術上講這給了我正確的結果無異常,但它需要永遠。 (通過「永遠」我的意思是超過60秒,而第一個版本在一秒內提供結果。)
有沒有辦法優化第二種方法?或者有沒有辦法讓第一種方法工作?
,因爲它會帶來你的組織到內存中,而不是讓你的數據庫處理查詢第二種方法將需要更長的時間。過去我也遇到過這個問題,恐怕我還沒有找到解決方案。 – jtiger