2009-08-26 42 views
4

狩獵周圍淨,以爲我會拿出解決方案之後,我似乎已經觸及磚牆。延遲加載實體框架中第1節昂貴領域

我在我的數據庫中有一張桌子:照片;包含用於PhotoID,Caption,Ordering和四組二進制數據的列:Original,Large,Medium和Small(是的,它基於具有各種修補程序的舊ASP.NET入門工具包等)。

我正在從L2S轉移到實體框架的過程中,因爲我看上去有一些優點 - 所以我不再需要通過PhotosTags屬性來獲取附加到照片的標籤列表例如,但我正在尋找一種方法來延遲加載二進制數據 - 大多數情況下,我只需要標題,標記和ID,然後將它們交給另一個區域以獲取二進制數據,當用戶實際上觀看圖像。

我已經採取了看看下面的帖子:中

  1. How to split a data table?
  2. 「Table Splitting」: Mapping multiple entity types to the same table.
  3. 第7章:Entity Framework Learning Guide(貴田7.1延遲加載)

我結束與一個實體映射看起來像這樣:

Entity Diagram http://www.doodle.co.uk//UserFiles/Image/EF-LazyLoad.png

而且,按照上面的聯繫,我修改了EDMX文件包括以下引用約束:

<ReferentialConstraint> 
    <Principal Role="Photos"> 
    <PropertyRef Name="PhotoID" /> 
    </Principal> 
    <Dependent Role="PhotoDetails"> 
    <PropertyRef Name="PhotoID" /> 
    </Dependent> 
</ReferentialConstraint> 

模型驗證,但不建立 - 因爲與標籤的問題映射我認爲:

錯誤3019:映射片段中的第871,892行開始的問題:組合鍵列的映射不正確。外鍵約束 'FK_siteContent_TagsPhotos_siteContent_Photos' 從表siteContent_TagsPhotos(PHOTOID)表siteContent_Photos(PHOTOID):表siteContent_TagsPhotos列(PHOTOID)被映射到被映射到屬性表siteContent_Photos在siteContent_TagsPhotos和列(PHOTOID)性能(PHOTOID)(PHOTOID)在PhotosPhotoDetails中。通過映射的列順序不會被保留。

從照片到標籤的關係是通過鏈接表,列PhotoID,TagID。

有沒有人設法獲得或者這些建議,或類似的東西,在.NET 3.5 SP1實體框架的工作,像這樣的數據結構?或者你能指出我的GoogleFU的侷限性嗎?

我知道,這都將是在.NET 4中容易得多,但是這不是在這裏,它很可能將是一個,而它的發佈,我的主機開始提供某處安裝它之後。

謝謝。

回答

2

我已經打了同樣的問題,雖然我還沒有找到一個解決方案3.5SP1我沒有證實這個錯誤與EF 4.0消失。

實際上,對於你潛在的解決方法是使用一個不同的領域爲您PhotoDetails實體的主鍵。

+0

「主鍵的不同字段」,你的意思是給它一個不同的名字,但使用相同的底層數據庫列,或添加一個新的列到數據庫,並使用它? – 2009-09-04 05:59:07

+0

不幸的是,我現在已經嘗試了兩種選擇:重命名實體上的標量屬性,這會導致相同的錯誤消息(通過映射的列的順序不會保留),向數據庫添加一個新列,從而暴露在這兩個實體中,並使用它作爲關鍵所引起的錯誤,沿着「你沒有在PhotoDetails中使用實體關鍵碼PhotoID」這一行。我擔心我將不得不修改實時數據庫 - 對LinqPad有好處,用遊標下來;) – 2009-09-04 19:37:51

+0

我的意思是在數據庫中添加一個新列並使用它。 – 2009-09-04 19:40:08