2011-06-29 54 views
3

視覺工作室給我一個錯誤的蹤跡,我已經死了。我正在嘗試將數據庫中的現有表添加到我的數據模型中。我知道桌子應該有一把鑰匙,但是它沒有,我無法修復;這不是我的數據庫重新設計。實體數據模型 - 添加一個無鑰匙表

當我第一次嘗試添加表,我得到這個錯誤:

The table/view 'BT8_GC.dbo.SAVED_QUERY_CATEGORY' does not have a primary key defined and no valid primary key could be inferred. This table/view has been excluded. To use the entity, you will need to review your schema, add the correct keys, and uncomment it.

好,好,我會爲它定義並取消鍵。這裏是我取消後,手動定義鍵塊(我也不得不添加可空=假部分):

 <EntityType Name="SAVED_QUERY_CATEGORY"> 
    <Key> 
     <PropertyRef Name="SQC_CAT_ID"/> 
     <PropertyRef Name="SQC_USER_ID"/> 
    </Key> 
    <Property Name="SQC_CAT_ID" Type="int" Nullable="false" /> 
    <Property Name="SQC_USER_ID" Type="int" Nullable="false" /> 
    <Property Name="SQC_CAT_DSCR" Type="varchar" MaxLength="50" /> 
    <Property Name="SQC_SEQ_NO" Type="int" /> 
    </EntityType> 

不,現在的設計師將不會打開。回到文件中,並且Intellisense顯示此錯誤:

Error 11002: Entity Type 'SAVED_QUERY_CATEGORY' has no entity set.

好的...取消註釋創建了一個新錯誤。添加實體集後:

<EntitySet Name="SAVED_QUERY_CATEGORY" EntityType="IssueModel.Store.SAVED_QUERY_CATEGORY" store:Type="Tables" Schema="dbo" /> 

Yay!設計師打開!仍然還沒有,因爲當它出現在商店的Tables/Views文件夾下時,它在模型中沒有實體類型。無法從我的代碼中調用它。儘管我沒有任何錯誤,但我嘗試創建實體集映射,但這會導致錯誤「在MetadataWorkspace中不存在」。

所以這就是我所嘗試過的。如何將這個設計不佳的表格放入我的數據模型中?

+2

對於後代,您必須將子元素「EntitySet」添加到「Schema」元素中的「EntityContainer」中。在我的情況下,'EntityContainer'是以摺疊形式自動生成的,所以我不得不揣摩出來。 –

回答

2

通過修改XML,您只添加了有關數據庫表的信息。現在您必須打開工具箱並在設計器中將實體添加到您的模型中。根據需要配置實體以具有屬性。然後打開映射細節並將新實體映射到您的表格。

Btw。一旦手動修改了描述數據庫的XML,就不能再使用數據庫中的更新了 - VS設計器將一直刪除您的更改,您將不得不再次執行這些更改。

+0

是否有另一種方法來添加一個表,然後在我稍後更新模型時不會被刪除? – Tyrsius

+1

不幸的是沒有。你可以修改數據庫來包含主鍵(你提到你不能),編寫一些腳本來自動修改EDMX,並在每次更新後運行它,嘗試一些[商業設計器擴展](http://www.huagati.com/ dbmltools /)或放棄EDMX並首先使用代碼(實體框架4.1)。 –