簡體   English   中英

實體框架-手動向多對多關系添加屬性-模型優先

[英]Entity Framework - Manually Add Properties to Many-to-Many Relationship - Model First

場景:

如前所述這里 ,一旦你添加額外的屬性,以一個簡單的連接表(多對多一對多的關系),它不再是一個隱藏的關聯。 這些問題也解決了這個問題:

現有代碼已經使用了簡單的,自動隱藏的導航屬性,並且對自動生成的表進行了一些較小的自定義,因此,當我更改基礎關系表時,我想避免重構整個項目。

題:

有沒有一種方法可以保留兩個自動導航(多對多)訪問器,但是我也可以直接訪問關系實體?

我可以只寫我自己的訪問器,從關系表中選擇,但后來它們不再是EntityCollections ,因此我擔心我會丟失任何可能發生的魔術,例如跟蹤等。

我可以手動將EntityCollections添加到實體嗎?

期望:

最初: Product* <-> *Offer

  • 產品有很多優惠(例如50%的折扣,BOGO)
  • 相同的優惠可能適用於許多產品(“紅色襯衫”和“藍色褲子”是BOGO)

期望: Product* <-[sort]-> *Offer

  • 當我列出產品的報價時,我可以將它們獨立排序
  • 即“紅色襯衫”的折扣為“ 50%”,然后為“ BOGO”,但是“藍色褲子”顯示的是“ BOGO”,然后為“ 50%”

那么我希望能夠做到:

// 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM