【问题标题】:Violation of PRIMARY KEY constraint on linked record when add a record using the entity framework使用实体框架添加记录时,对链接记录的 PRIMARY KEY 约束违反
【发布时间】:2011-06-03 09:32:10
【问题描述】:

我有一张名为farmers 的表。每个农民都有一个强制性的指定国家。

当我使用 antity 框架向数据库添加一个新农民时,我在 country 表上遇到了违规行为。看起来实体框架想将国家添加到国家表中,但我只想要农民表中的 guid:

违反主键约束“PK_Country”。无法插入 对象“dbo.Country”中的重复键。该声明已 终止。

有人可以告诉我我做错了什么吗?这里是插入代码:

        newFarmer.Guid = Guid.NewGuid();
        ents.Farmer.AddObject(newFarmer);
        ents.SaveChanges();
        return newFarmer;

我什至检查了这个国家的状态,它说没有改变。

【问题讨论】:

  • 将这两个实体和表的结构添加到问题中。
  • 您的代码 sn-p 中最重要的部分丢失了:从哪里获得分配给 newFarmer.CountryCountry 对象?通常,当您调用AddObject(newFarmer) 时,人们会立即猜测您的Country 对象未附加到ObjectContext,这将导致Country 对象的INSERT。但是它的状态不能像你说的那样是unchanged。你的例外是 - 状态为unchanged 的对象 - 几乎不可能。您的问题描述和代码中必须缺少一些重要信息。

标签: entity-framework entity-framework-4 constraints primary-key


【解决方案1】:

一种可能的解决方案是 Entity Framework 不理解您的实体主键也是身份并且应该自动递增。我在首先使用带有数据库的 EF 4.1 的应用程序中遇到了同样的问题。为了解决这个问题,我不得不::

  • 确保我的实体主键有一个名称“ID”(以避免将装饰器 [Key] 放在我的模型类之上。
  • 确保您的数据库系统(在我的例子中是 SQL Server)的属性选项“身份”设置为“是”。

然后,我的 EF4.1 能够插入和更新我的实体。

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多