将表中的一列映射到多个表

时间:2013-11-04 07:45:14

标签: asp.net-mvc entity-framework

我正在开发一个创建WMS系统的新产品开发。我以前使用ASP,VB和其他技术来完成它,我们没有对映射进行硬编码。但现在我正在使用MVC和实体框架工作,我很难过。如何将事务表中的一列映射到多个表中的列。

我有交易表 反式 TRANSID orderref TTYPE 的productid 数量 ....(更多专栏) 现在,orderref将包含Receiptkey,orderkey,movementkey,adjustmentkey和TType列,它将告诉我我正在处理哪种类型的事务,并根据我将知道要进一步链接的表。现在我如何在实体框架工作中实现这一点。这是最重要的一步。我用其他语言多次这样做但现在使用EF我被卡住了。请帮忙。我在网上查了很多但是我还没找到。我是MVC和实体框架工作架构的新手。任何指导都将受到高度赞赏。

Ranjit

1 个答案:

答案 0 :(得分:0)

要实现您的目标,您应该使用Table-per-Type层次结构。但是你的列TType不是必需的,因为EF通过外键链接匹配它。 如何在codefirst方法中执行此操作,您可以阅读here。 简而言之:您将基类型映射到基表,并将继承的类型映射到包含详细信息的链接表。

实施例: 您可以在数据库中创建三个表:

TransactionBasesTransId,以及所有交易的其他常用列;

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
}