我有可能/可能沒有圖像集合的產品和位置實體。 我知道我無法在各自的實體中創建列表,但我也不想在其他兩個圖像實體中創建關聯。EF 4.2代碼優先 - 圖像,位置,產品實體不能使用列表
我只希望圖像實體具有Id和文件路徑。
有沒有一種方法可以做到這一點?
如果答案是我必須在其他兩個圖像實體中創建一個關聯,那意味着在將來我創建一個新的實體可能/不可能有照片,我必須修改圖像實體爲該協會和我不喜歡這個想法。
在此先感謝。
我有可能/可能沒有圖像集合的產品和位置實體。 我知道我無法在各自的實體中創建列表,但我也不想在其他兩個圖像實體中創建關聯。EF 4.2代碼優先 - 圖像,位置,產品實體不能使用列表
我只希望圖像實體具有Id和文件路徑。
有沒有一種方法可以做到這一點?
如果答案是我必須在其他兩個圖像實體中創建一個關聯,那意味着在將來我創建一個新的實體可能/不可能有照片,我必須修改圖像實體爲該協會和我不喜歡這個想法。
在此先感謝。
這聽起來像你想要一個單向關係。它是否正確?因此,您想從產品和位置訪問Collection<Image>
,但無法從圖像訪問產品或位置?
你可以這樣做。在EF中,Image類將不具有導航屬性到產品或位置 - 它將只有Id和FilePath。
但是在數據庫中,圖像表將有用於ProductId和LocationId的列。這樣EF可以管理外鍵關係並填充產品和位置上的收集資產。
代碼:
modelBuilder.Entity<Product>.HasMany(p => p.Images).WithOptional()
.Map(d => d.MapKey("ProductId"));
modelBuilder.Entity<Location>.HasMany(p => p.Images).WithOptional()
.Map(d => d.MapKey("LocationId"));
當你的應用程序管理這些,你可以將圖像添加到您的主要實體(產品和位置)的圖像集合屬性,而不必從從屬圖像設置導航屬性回到委託人(你不能因爲外鍵屬性不存在)。
您可以創建兩個新表格ProductImages和LocationImages,從您的產品和位置鏈接到該集合,當插入一個項目時,插入一條連接圖像和產品的記錄。
這樣,當你加載你的產品或你的位置,你可以通過檢查集合來檢查是否有任何關聯圖像。