现实世界的情景是契约,抵押等,所有这些都被称为县级登记处和记录员办公室的“工具”。
此方案我有以下实体。
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的关系。
有没有办法使用独立的主键拉出上述模型?
答案 0 :(得分:1)
正如您所发现的,Entity Framework仅支持与共享主键的1:1或1到0..1关系。原因是EF不理解或支持唯一约束。因此,即使您的数据库中有一个唯一约束,EF也不知道,因此它无法保证RequestInstrument.InstrumentId是唯一的。
如果您需要保留此数据模型,那么您可以做的最好的是1到多个,您只需在多个集合中假设一个项目。这不是理想的,但这是让它发挥作用的唯一方法。
实体框架6.x确实支持唯一索引,并且有一些关于增强EF模型以将其用于1:1支持的讨论,但尚未实现。