实体框架:糟糕的数据库设计和多个密钥

时间:2013-12-20 21:23:06

标签: c# entity-framework

我正在使用实体框架在C#中开发新版本的软件。我是这项技术的新手,但新版本正在游泳。我们的主要阻碍在于如何设计与我们现有(设计不良)数据库模式匹配的实体。设计新的数据库模式超出了本项目的范围,尽管我们可以在必要时进行小的更改。

我目前正试图解决已出现的特定问题。以下是一些证明问题的模型:

public class EntityA
{
    [Key] 
    public int SurrogateKey { get; set; } 
    public int NaturalKey1 { get; set; }
    public int NaturalKey2 { get; set; }

    public virtual ICollection<EntityB> B { get; set; }
    public virtual ICollection<EntityC> C { get; set; }
}

public class EntityB
{
    [Key]
    public int EntityBID{ get; set; }

    [ForeignKey("EntityA "), Column(Order = 0)]
    public int EntityANaturalKey1 { get; set; }
    [ForeignKey("EntityA "), Column(Order = 1)]
    public int EntityANaturalKey2 { get; set; }

    public virtual EntityA A { get; set; }
}

public class EntityC
{
    [Key]
    public int EntityCID{ get; set; }

    [ForeignKey("EntityA ")]
    public int EntityASurrogateKey  { get; set; }

    public virtual EntityA A { get; set; }
}

因此,在我们的数据库中,我们有20个实体跟随EntityB,它们引用EntityA的自然键,以及类似数量的实体,如EntityC,它们引用代理键。

据我所知,实体框架不允许您为同一个实体定义多个密钥。当我尝试在我的应用程序中处理这些模型时,我得到有关Multiplicity的错误以及相关和主要角色的数量不相同。

是否有任何解决方法可以通过Entity框架处理这个问题,或者我是否需要调整我的数据库,以便所有实体都使用代理键?

0 个答案:

没有答案