当前位置: 首页 > 知识库问答 >
问题:

DbUpdateException on SaveChange如果子外键已经存在-在实体框架代码优先

井礼骞
2023-03-14

[将代码优先DbContext与实体框架5.0 RC一起使用]

public class Compositon
{

    public string Id { get; set; }

    public string SimpletonId { get; set; }

    [ForeignKey("SimpletonId")]
    public Simpleton Simpleton { get; set; }

    public string CompanitonId { get; set; }

    [ForeignKey("CompanitonId")]
    public Companiton Companiton { get; set; }
}
var composition = new Compositon();
compositon.Id = "UniquePrimaryKey";
var simpleton = new Simpleton();
// This foreign key does not exist in database yet
simpleton.Id = "Simpleton1";
composition.Simpleton = simpleton;
var companiton = new Companiton();
companiton.Id = "SomeOther1";
composition.Companiton = companiton;
// Repositor references the DbContext
Repositor.Compositons.Add(composition);
Repositor.SaveChanges();
var composition = new Compositon();
compositon.Id = "AnotherUniquePrimaryKey";
var simpleton = new Simpleton();
// This foreign key already exists in database
simpleton.Id = "Simpleton1";
composition.Simpleton = simpleton;
var companiton = new Companiton();
companiton.Id = "SomeOther2";
composition.Companiton = companiton;
Repositor.Compositons.Add(composition);
Repositor.SaveChanges();

DbUpdateException:更新条目时出错

我需要能够将这些父类保存到数据库中,因为它们是唯一的,即使它们有时包含已存储的导航属性-我如何从这个子主键冲突中保存父类?

共有1个答案

洪和平
2023-03-14

在第二遍中,您需要从DbContext中检索现有的Simpleton。我猜您可以这样做:

`simpleton = Repositor.Simpletons.First(s => s.Id == "Simpleton1");`

目前,您正在创建一个全新的实体框架,实体框架试图将其插入,因此存在关键违规。

 类似资料:
  • 好吧,我知道我对C#和MVC还很陌生,但我正在尝试使用代码优先的方法向数据库中添加项。 现在,我已经成功地为数据库创建了新条目,但当我转到SQL Server时,却找不到数据库或表。 因此,我的问题是,这些数据存储在哪里,因为我无法在SQL Server中看到它,就像我手动创建的其他数据库一样? 我的ConnectionString是:

  • 我对Entity Framework 6非常陌生,我想在我的项目中实现存储过程。我有一个存储过程,如下所示: 班级: 我的问题是:如何调用存储过程并向其中传递参数?

  • 因此,我使用实体框架的“代码优先”方法,并且我有映射文件来映射表信息并添加诸如验证之类的内容,例如: 这是在使用Fluent API,我想知道如何通过字符串而不是T.AccountName获得属性名。我想动态设置这些属性,但我不知道如何通过编程实现。

  • 我有一个MasterUserApprovalOfficial实体,它有两个外键,MasterUserId和SoftwareSystemId。EF 7足够聪明,可以看出这两个属性是外键。这是我的MasterUserApprovalOfficial类 如果我查看创建的表,MasterUserId列按预期创建并命名,SoftwareSystemId列然而被创建为(类的名称附加到主键的名称) 有什么原因吗

  • 我的MVC应用程序中有两个实体,我使用实体框架6代码优先的方法填充数据库。学生实体中有两个城市id;其中一个代表出生城市,另一个代表工作城市。当我如上所述定义外键时,将在迁移后在学生表中创建一个名为City\u ID的额外列。是否存在错误或如何定义这些FK?提前谢谢。 学生: 城市:

  • 我想将类的外键从列表映射到类的主键。实体框架在子问题中没有建立这种关系。 我的形式类。 我的问题课。 IEntityTypeConfiguration中的配置应该是什么样子?