我有兩個實體填充用的ID導航集合,而不到相關實體
public class Business
{
public int BusinessId { get; set; }
public ICollection<Category> Categories = {get;set;}
}
而且
public class Category
{
[Key]
public int CategoryId { get; set; }
public string Name { get; set; }
}
我從我的客戶包含一個JSON其類別中的一個業務ID,並收集得到的參考身份證(有不同數量的類別,每個企業註冊一些,例如「私人教師 - 高中」,「私人教師 - 初級」等)。
我希望能夠創建業務並關聯它們,而無需首先加載相關類別實體。
我知道這是可能在一對單的導航屬性使用外鍵屬性:
//EXAMPLE OF 1-1
public class Business
{
[ForeignKey]
public int CatId{ get; set; }
public Category cat {get;set;}
}
但無法找到集合導航性能的解決方案。
性能方面,這是一場災難, 在我寫的一個測試中創建了100個擁有1000個類別中的3個類別的企業接管了5秒!
DateTime start = DateTime.Now;
for (int i = 0; i < 100; i++)
{
using (Model m = new Model())
{
Business biz = new Business();
biz.Categories.Add(m.Categories.Find(3));
biz.Categories.Add(m.Categories.Find(5));
biz.Categories.Add(m.Categories.Find(63));
}
}
DateTime end = DateTime.Now;
Console.WriteLine(end - start);
(使用相同的DbContext是錯誤的,只能讓我到3秒)。
我知道我可以使用一種變通方法,並存儲所有我的靜態詞典分類,並從那裏獲取,但 A.我不知道EF不會爲他們創建新實例每次 B.即使我克服A,我仍然需要一個EF解決方案來解決這個問題,這讓我想也許我不應該使用EF,並堅持舊的T-SQL和存儲過程。 也許EF無法通過任何方式與專門設計的T-SQL競爭(不是60%,而是600%)。與T-SQL相比,所有Lambadas,謂詞和LINQ都不是簡單的開發工具。
我對「商業」和「類別」之間的關係有點困惑。這應該是多對多的,還是一對多的?因爲從你給它的例子看來,它是一對一的。 – IronMan84 2014-12-03 19:38:22
其實它可以是,性能對兩種情況都很糟糕(今天檢查)是否有可能是我的連接或設置有問題?因爲我不相信這是EF如何反應。在其他機器上它是一樣的嗎? – MatanCo 2014-12-04 20:24:27