EF5与不同键的一对一或零关系

时间:2014-09-10 20:45:40

标签: c# ef-code-first entity-framework-5

现实世界的情景是契约,抵押等,所有这些都被称为县级登记处和记录员办公室的“工具”。

此方案我有以下实体。

public class Request
{
    [Key]
    public int RequestId { get; set; }

    public virtual RequestInstrument RequestInstrument { get; set; }
}

public class RequestInstrument
{
    [Key]
    public int RequestId { get; set; }
    //This column is also unique and it is enforced in the database
    //but it is not the primary key
    public int InstrumentId { get; set; }

    public virtual Request Request { get; set; }
    public virtual Instrument Instrument { get; set; }
}

public class Instrument
{
    [Key]
    public int InstrumentId { get; set; }

    public virtual RequestInstrument RequestInstrument { get; set; }
}

要求提供文书。有些乐器没有请求就被录制了。并非所有请求都变成记录的工具。这就是请求和工具具有独立主键的原因。当请求转变为记录的工具时,相关工具只有一个请求,反之亦然。

据我所知,如果两个表具有相同的密钥,则EF仅支持1到1..0的关系。如果有这样的话,我想这真的是一个1..0到1..0的关系。

有没有办法使用独立的主键拉出上述模型?

1 个答案:

答案 0 :(得分:1)

正如您所发现的,Entity Framework仅支持与共享主键的1:1或1到0..1关系。原因是EF不理解或支持唯一约束。因此,即使您的数据库中有一个唯一约束,EF也不知道,因此它无法保证RequestInstrument.InstrumentId是唯一的。

如果您需要保留此数据模型,那么您可以做的最好的是1到多个,您只需在多个集合中假设一个项目。这不是理想的,但这是让它发挥作用的唯一方法。

实体框架6.x确实支持唯一索引,并且有一些关于增强EF模型以将其用于1:1支持的讨论,但尚未实现。