2013-01-18 50 views
2

這裏是我找不到任何有用的senario。也許我做這樣的第一人稱思考:實體框架4.1複雜類型在不同模型中的重用

方法:數據庫首先

數據庫:SQL Server 2008 R2的

項目:DLL(數據訪問)

我有一個數據訪問庫,它封裝了對數據庫的所有訪問以及商務功能。該數據庫有許多表和所有表有以下兩列:

  • last_updated_on:SMALLDATETIME
  • LAST_UPDATED_BY:爲nvarchar(50)

該項目包含幾種模式(或edmx文件),它們只包含映射到它們所代表的表格的相關實體。

複雜類型:歷史

  • 通過(字符串:LAST_UPDATED_BY)由於每個表都包含列last_updated_ *我在模型是如下的一個創造了一個複雜類型
  • 開(日期時間:last_updated_on

的問題是,它只能用於在我定義它的模型中。

A)如果我嘗試在其他模型中使用它,它不顯示它在設計 B)如果我在其他車型定義它,我得到錯誤的歷史已經定義

是否有任何解決方案,因此在一個模型中定義的歷史複雜類型是否可以被其他模型重用?

回答

0

我試圖做幾乎完全相同的事情(我的數據庫字段是「創建」,「creatorId」,「修改」,和「modifierId」,包裝成一個複雜的類型RecordHistory)並遇到這個問題找到答案之前...

http://msdn.microsoft.com/en-us/data/jj680147#Mapping概述瞭解決方案,但因爲它是相當簡單的,我會在這裏介紹的基礎知識太:

  1. 首先創建複雜的類型,你沒有(請在領域.edmx設計器,右鍵單擊,選擇「Refactor into New Complex Type」)

  2. 在的.edmx設計器(不是模型瀏覽器)右鍵單擊另一個表/實體具有相同的公共欄,然後選擇添加 - >複雜屬性

  3. 新的屬性將被自動分配一個複雜類型。如果你有超過1種複雜類型,編輯新的屬性的屬性和設置的類型適當

  4. 在桌子上/實體再次右鍵單擊(無論是在模型瀏覽器或設計器),然後選擇表映射

  5. 更新每個常用字段的值/屬性列(在我的情況下,將它們從「modified:DateTime」更改爲「history.modified:DateTime」)

  6. 從您的實體中刪除舊的通用字段,只留下複雜的類型

+0

作爲一個方面說明,看起來(即使EF5)你不能使用封裝在複雜類型中的任何字段作爲導航屬性/外鍵 – DaveD