gpt4 book ai didi

c# - Entity Framework Core - 插入单向父子关系

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:20 25 4
gpt4 key购买 nike

由于 Table Per Type 在 Core 中不可用,我不得不采取一些变通方法来让我的实体符合我的喜好。本质上,我有一个基类及其属性,以及一个指向其父级的导航属性:

 public class Provision
{
public Guid ProvisionId { get; set; }
public string ProvisionName { get; set; }
public string ProvisionDescription { get; set; }

public Provision(){}
}

public class CompanyLeaveProvision
{
public Guid ProvisionId { get; set; }
public int CompanyId { get; set; }
public Provision Provision { get; set; }

public CompanyLeaveProvision() { }
}

配置:

public void Configure(EntityTypeBuilder<Provision> builder)
{
// Primary Key
builder.HasKey(t => t.ProvisionId);

// Properties
builder.Property(t => t.ProvisionName)
.IsRequired()
.HasMaxLength(40);

builder.Property(t => t.ProvisionDescription)
.HasMaxLength(500);

// Table & Column Mappings
builder.Property(t => t.ProvisionId).HasColumnName("ProvisionID");
builder.Property(t => t.ProvisionName).HasColumnName("ProvisionName");
builder.Property(t => t.ProvisionDescription).HasColumnName("ProvisionDescription");
builder.ToTable("Provision", "Organization");
}

public void Configure(EntityTypeBuilder<CompanyLeaveProvision> builder)
{
// Primary Key
builder.HasKey(t => t.ProvisionId);

// Properties
builder.Property(t => t.ProvisionId)
.IsRequired();

builder.Property(t => t.CompanyId)
.IsRequired();


// Table & Column Mappings
builder.ToTable("CompanyLeaveProvision", "Organization");
builder.Property(t => t.ProvisionId).HasColumnName("ProvisionID");
builder.Property(t => t.CompanyId).HasColumnName("CompanyID");


builder.HasOne(t => t.Provision).WithOne().HasForeignKey<Provision>(t => t.ProvisionId);



}

我的背景:

ProvisionContext: DbContext, IContext    {
public DbSet<Provision> Provisions { get; set; }
public DbSet<CompanyLeaveProvision> CompanyLeaveProvisions { get; set;}
// OnModelCreating and other code below
}

我在 Organization.CompanyProvision 表上有一个外键约束,它引用 Organization.Provision 表上的 ProvisionId 属性。

发生的事情是 CompanyProvision 被插入到基础 Provision 之前,导致此错误:

The INSERT statement conflicted with the FOREIGN KEY constraint "fk_CompanyLeaveProvision_Provision". The conflict occurred in database "Dev", table "Organization.Provision", column 'ProvisionID'.

要尝试保存,这是我调用的代码:

    _context.Entry(command.Provision.Provision).State = EntityState.Added;
_context.Entry(command.Provision).State = EntityState.Added;
await _context.SaveChangesAsync();

除了在 each _context.Entry(MyEntity).State = EntityState.Added 之后调用 SaveChanges() 之外,还有什么办法可以解决这个问题吗?我宁愿立即保存这些。我知道存储过程也是一种选择,但我不想那样做。

感谢您的帮助!

最佳答案

就是因为这个流畅的映射

.HasForeignKey<Provision>(t => t.ProvisionId)

告诉 EF Core Provisiondependent 实体,并且与主体实体 CompanyLeaveProvision 有 FK,而数据库模型则相反.

所以只需将 Provision 更改为 CompanyLeaveProvision

.HasForeignKey<CompanyLeaveProvision>(t => t.ProvisionId)

关于c# - Entity Framework Core - 插入单向父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53196167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com