为了账号安全,请及时绑定邮箱和手机立即绑定

Entity Framework Core 将记录插入数据库

Entity Framework Core 将记录插入数据库

C#
侃侃尔雅 2023-08-20 11:03:28
我在我的项目中使用 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?
查看完整描述

2 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

银行是一个按规定存在的实体(单一),银行不会改变,它的属性是它自己的。保单由银行发行,因此,保单应通过银行 Guid 或 ID 属性(外键)引用银行,这将创建您想要的父 -> 子关系。这是一种ONE-TO-MANY关系。我认为您可能想要花更多时间学习数据库关系设计,或者在创建实体类之前将这些内容绘制在纸上。

编辑:伊戈尔给了你一个选择,坚持到底,不改变你的实体,但我认为你应该认真考虑以反映数据库关系设计的方式构建你的实体。只是我的观点。


查看完整回答
反对 回复 2023-08-20
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

如果您不想引入外键,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();


查看完整回答
反对 回复 2023-08-20
  • 2 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信