EF4一对一代码首先和现有数据库,没有外键

时间:2012-08-20 21:46:21

标签: entity-framework entity-framework-4.1 ef-code-first one-to-one

我正在尝试使用流畅的API将现有数据库映射到POCO类。一切都很好,一对多和多对多的关系,但一对一的失败与我尝试的gazillions选项。

sql表很简单,AgentAgentID为PK,AdditionalAgentInfoAdditionalAgentInfoID为PK,列为AgentIDAgent没有AdditionalAgentInfoID,但我在测试数据库中添加了这个,看看这是否能解决它而没有运气。

所有帖子都指出:

        pModelBuilder.Entity<Agent>()
              .HasOptional(u => u.AdditionalAgentInfo)
              .WithRequired(x => x.Agent);
        pModelBuilder.Entity<AdditionalAgentInfo>()
        .HasRequired(u => u.Agent)
        .WithOptional(x => x.AdditionalAgentInfo);

我的上下文加载但Agent.AdditionalAgentInfo始终为NULL。查看分析器,sql尝试加入错误的列:

FROM [dbo].[AdditionalAgentInfo] AS [Extent1]
WHERE [Extent1].[AdditionalAgentInfoID] = @EntityKeyValue1

它应该是:

FROM [dbo].[AdditionalAgentInfo] AS [Extent1]
WHERE [Extent1].[AgentID] = @EntityKeyValue1

所以我尝试添加Map(x=>x.MapKey("AgentID"),但我的重复列错误。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

这是因为EF仅支持共享PK一对一映射。 AdditionalAgentInfo PK也应该是FK到Agent表。否则,您必须将其映射为一对多关系,并忽略many结束属性。