如何在应该有多个表的表中映射外键?

时间:2014-01-23 01:34:59

标签: c# .net entity-framework asp.net-mvc-4

我有下表,

标识 的EntityType ENTITYID 消息

根据EntityType的不同,它将映射到不同的表

如果EntityType为1,则映射表为Table1 如果EntityType为2,则Mapping表为Table2

如何在实体框架工作中创建地图配置?

我正在使用MVC4和EF5

1 个答案:

答案 0 :(得分:0)

我有一个类似的设计问题,我找不到一个(干净的)EF方式来做这件事。如果你考虑底层数据库,它将是一个单字段,它是一个引用不同表的外键 - 甚至可能吗?

我可以建议两种替代方法。首先,您可以定义可选关系:

public class EntityTypeMap
{
    public int Id { get; set; }

    public virtual EntityType1 EntityType1 { get; set; }
    public int? EntityType1Id { get; set; }

    public virtual EntityType2 EntityType2 { get; set; }
    public int? EntityType2Id { get; set; }

    public string Message { get; set; }
}

第二个(更好)选项是创建单独的模型,但派生自相同的基类:

public class BaseMap
{
    public int Id { get; set; }
    public string Message { get; set; }
}

public class EntityType1Map : BaseMap
{
    public virtual EntityType1 EntityType1 { get; set; }
    public int? EntityType1Id { get; set; }
}

public class EntityType2Map : BaseMap
{
    public virtual EntityType2 EntityType2 { get; set; }
    public int? EntityType1Id { get; set; }
}