[英]Entity Framework - Manually Add Properties to Many-to-Many Relationship - Model First
如前所述這里 ,一旦你添加額外的屬性,以一個簡單的連接表(多對多一對多的關系),它不再是一個隱藏的關聯。 這些問題也解決了這個問題:
現有代碼已經使用了簡單的,自動隱藏的導航屬性,並且對自動生成的表進行了一些較小的自定義,因此,當我更改基礎關系表時,我想避免重構整個項目。
有沒有一種方法可以保留兩個自動導航(多對多)訪問器,但是我也可以直接訪問關系實體?
我可以只寫我自己的訪問器,從關系表中選擇,但后來它們不再是EntityCollections
,因此我擔心我會丟失任何可能發生的魔術,例如跟蹤等。
我可以手動將EntityCollections
添加到實體嗎?
最初: Product* <-> *Offer
期望: Product* <-[sort]-> *Offer
那么我希望能夠做到:
// original access, do stuff
List<Offer> applicableOffers = currentProduct.Offers.Where(...);
// hit up the join table directly for properties
var applicableOffersInOrder = applicableOffers.OrderBy(o => o.ProductOffers.Sort);
而不是
var applicableOffersInOrder = currentProduct.ProductOffers
.OrderBy(o => o.Sort)
.Offers.Where(...);
我認為最簡單的方法是在非自動生成的partial
類中手動添加兩個屬性:
partial class Offer
{
public IQueryable<Product> Products
{
get { return this.ProductOffers.Select(x => x.Product); }
}
}
partial class Product
{
public IQueryable<Offer> Offers
{
get { return this.ProductOffers.OrderBy(x => x.Sort).Select(x => x.Offer); }
}
}
當您要添加新的ProductOffer
,這ProductOffer
,但是由於實際上您有多余的數據( Sort
),因此無論如何都應該通過ProductOffers
集合進行此ProductOffers
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.