【问题标题】:Entity Framework code-first isn't saving data实体框架代码优先不保存数据
【发布时间】:2012-12-24 20:16:51
【问题描述】:

我正在尝试通过 split Person | 完成表格拆分模式PersonData 与 Entity Framework 5 建立 1:1 关系。我正在使用代码优先方法,因为出于某种原因,EF 5.0 不喜欢 1:1 关系作为模型优先,恕我直言,这很糟糕。

PersonPersonData 都在 SQL Server 中将它们的 ID 列设置为标识:

人物表:

|ID|
|Name|
|.....|

PersonData 表:

|ID|
|ID_Person|
|.....|

SaveChanges() 命令 SQL 返回后,我无法在表中插入标识列的显式值。

然后我更改了我的PersonData 地图文件:

this.HasKey(t => t.ID).Property(p =>
p.ID).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

又试了一次。现在我明白了

ReferentialConstraint 中的依赖属性映射到 商店生成的列。列:“ID”。

我应该改变什么?

【问题讨论】:

  • EF 5.0 可以毫无问题地在模型优先中建立 1:1 关系
  • 不,不是。多重性在关系“Blabalbala”中的角色“Blablalah”中无效。因为从属角色属性不是关键属性,所以从属角色的多重性的上限必须是*。
  • 你通过类继承来做到这一点。在这种情况下,PersonData 将继承自 Person。这非常简单。
  • 为什么 PersonData 会有一个标识列? ID_Person 肯定是外键和主键。
  • 这是什么意思?当您拥有 ID_Person 形式的唯一标识符时,标识列有什么好处?

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


【解决方案1】:

您必须将PersondData 主键作为外键映射到PersonID_Person 在这种情况下不能使用,因为它会导致一对多关系(EF 不支持唯一性约束,没有唯一性就无法建立一对一关系)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 2011-07-20
    • 2017-09-01
    相关资源
    最近更新 更多