2013-11-04 90 views
0

我正在開發創建WMS系統的新產品開發。過去我使用ASP,VB以及其他我們沒有對映射進行硬編碼的技術。但現在我正在使用MVC和實體框架工作,我很難過。如何將事務表中的一列映射到多個表中的列。將表中的一列映射到多個表

我有事務表 反式 TRANSID orderref TTYPE 的productid 數量 ....(更多列) 現在orderref將舉行要麼Receiptkey,orderkey,movementkey,adjustmentkey和TTYPE列會告訴我我正在處理哪種類型的交易,並基於此知道哪些表要進一步鏈接。現在我怎麼能在實體框架工作中實現這一點。這是最重要的一步。我用其他語言做過很多次,但現在使用EF卡住了。請幫忙。我在網上查了很多,但我還沒有找到它。我是MVC和實體框架工作架構的新手。任何指導將不勝感激。

蘭吉特

回答

0

達到你想要什麼,你應該使用表每類層次結構。但是你的列TType不是必須的,因爲EF通過外鍵鏈接匹配它。 如何在codefirst方法中做到這一點,您可以閱讀here。 簡而言之:您將您的基本類型映射到基本表並將您的繼承類型映射到具有詳細信息的鏈接表。

例: 可以在數據庫中創建三個表:

TransactionBases的列TransId,併爲所有交易的其他一些常見的欄目;

ConcreteTransactionAs與列TransId即主鍵和外鍵爲TransactionBase,以及其他特定於此事務類型的列;

ConcreteTransactionBs與列TransId即主鍵和外鍵爲TransactionBase,以及其他具體到此事務類型的列;

然後在你的代碼中創建三個實體類:

public class TransactionBase 
{ 
    [Key] 
    public Guid TransId {get;set;} 

    ... //other common properties for all transaction types 
} 

[Table("ConcreteTransactionAs")] 
public class ConcreteTransactionA: TransactionBase 
{ 
    ...//specific to this transaction type columns 
} 

[Table("ConcreteTransactionBs")] 
public class ConcreteTransactionB: TransactionBase 
{ 
    ...//specific to this transaction type columns 
} 
+0

所以基本上基里爾我必須創建一個抽象類和2類繼承它和實例化這些類。那麼它會在數據庫中創建什麼?對不起,我可能聽起來很幼稚,但我不太熟悉EF codefirst映射,總是反其道而行之。 – user1721814

+0

您可以在數據庫中創建表格,然後使用codefirst方法映射到該表格。 Codefirst意味着映射是在代碼中,而不是在xml文件中。我會用例子更新答案。 –

+0

Hello Kirill,感謝你的例子,在這個例子中,每次引入一個新的T型時,我將不得不添加一個新類。所以交易將分散在多個tbls。這可能與EF規則保持一致,但如果我必須根據使用某種其他編程語言的基表創建另一個系統或子系統,則會增加額外的複雜性。目前我有5個T類型,所以我將有一個trans hdr tbl和5個細節tbls,每個映射到一個T Type.Every細節創建的實例,我將有一個新的條目創建在標題以及。我的假設是正確的? – user1721814