2013-11-04 52 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