我正在使用实体框架在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框架处理这个问题,或者我是否需要调整我的数据库,以便所有实体都使用代理键?