我有2個對象 - 訂單和產品。在訂單上,只有productID被保存,當我查看訂單時,我想查看產品名稱。根據ScuttGu的博客,這很容易通過使用帶有Eval的模板字段(「Product.ProductName」)來完成。但是,在查看實際查詢時,我發現每個訂單都有一個單獨的查詢。外鍵導致更多的查詢?
它不適合我,因爲對於許多行和/或外鍵許多額外的查詢將被做出。它不會使整體效率太低(即linq爲什麼不使用連接)?
感謝
我有2個對象 - 訂單和產品。在訂單上,只有productID被保存,當我查看訂單時,我想查看產品名稱。根據ScuttGu的博客,這很容易通過使用帶有Eval的模板字段(「Product.ProductName」)來完成。但是,在查看實際查詢時,我發現每個訂單都有一個單獨的查詢。外鍵導致更多的查詢?
它不適合我,因爲對於許多行和/或外鍵許多額外的查詢將被做出。它不會使整體效率太低(即linq爲什麼不使用連接)?
感謝
這是因爲在那個評估和演示了運行點,查詢已經擁有,不說加入。
當你取你可以使用DataLoadOptions查詢到包括該使用.LoadWith()
method:
var dlo = new DataLoadOptions();
dlo.LoadWith<Order>(o => o.Product);
var dc = new DataContext();
dc.LoadOptions = dlo;
var orders = from dc.Orders select o;
那是因爲你的產品是懶惰加載 - 也就是在需要的時候,他們被加載。
可以DataLoadOptions設置你的fetchingstrategy,並與您的訂單加載產品:
MyDataContext db = new MyDataContext();
DataLoadOptions options = new DataLoadOptions();
options.LoadWith<Order>(order => order.Product);
db.LoadOptions = options;
var orders = from c in db.Orders
如果你不喜歡的PR。 loadoptions的DataContext的規範,你做這樣的事情(不testet):
MyDataContext db = new MyDataContext();
db.Orders
.Select(o => new { Order = o, Products = o.Products})
.ToList()
.Select(x => x.Order)
.ToList();
我已經實現了類似this guys fethingstrategies,這與我的信息庫和規範模式工作地非常好。