猿问

Entity Framework Core 将记录插入数据库

我在我的项目中使用 Entity Framework Core。我的实体看起来像这样:


[Table("Policy")]

public class Policy

{

    [Key]

    public Guid Id { get; set; }    

    public Bank Bank { get; set; }          

    public string LastUpdateBy { get; set; }    

}


[Table("Bank")]

public class Bank

{

    [Key]

    public Guid Id { get; set; }    

    public string Code { get; set; }    

    public DateTime? CreateTs { get; set; } 

}

在 SQL 中,表如下所示Policy:


Id (uniqueidentifier)

Bank (varchar)

LastUpdateBy (varchar)

我Bank在Policy实体中引用是因为我想建立父子关系。


当我尝试在Policy表中添加记录时,出现以下错误


违反主键约束“PK_Bank”。无法在对象“dbo.Bank”中插入重复的键。重复的键值为 (829e0798-c7ee-4fcf-b18d-0fbc60f63fad)。


这是我的代码:


var policy = new Policy

{

    Bank = new Bank

    {

        Id = "829e0798-c7ee-4fcf-b18d-0fbc60f63fad"

    },

    Id = Guid.NewGuid(),

    LastUpdateBy = "User"

};


dbContext.Policy.Add(policy);

dbContext.SaveChanges();

我知道,它也试图在表中添加一条记录Bank。我如何告诉 EF Core 仅在表中插入记录Policy?


侃侃尔雅
浏览 111回答 2
2回答

红颜莎娜

银行是一个按规定存在的实体(单一),银行不会改变,它的属性是它自己的。保单由银行发行,因此,保单应通过银行 Guid 或 ID 属性(外键)引用银行,这将创建您想要的父 -> 子关系。这是一种ONE-TO-MANY关系。我认为您可能想要花更多时间学习数据库关系设计,或者在创建实体类之前将这些内容绘制在纸上。编辑:伊戈尔给了你一个选择,坚持到底,不改变你的实体,但我认为你应该认真考虑以反映数据库关系设计的方式构建你的实体。只是我的观点。

收到一只叮咚

如果您不想引入外键,Bank则必须先附加银行。var bank = new Bank{    Id = "829e0798-c7ee-4fcf-b18d-0fbc60f63fad"};dbContext.Bank.Attach(bank);var policy = new Policy{    Bank = bank,    Id = Guid.NewGuid(),    LastUpdateBy = "User"};dbContext.Policy.Add(policy);dbContext.SaveChanges();
随时随地看视频慕课网APP
我要回答