首页 > 解决方案 > 将 EF Core 2.1 升级到 3.1 后如何使用“SaveChanges”

问题描述

public class A
{
    public long Id { get; set; }
}

public class B
{
    public long a_Id { get;set; }
    public A a { get;set; }
}

public class BMap
{
    builder.HasForeignKey(x => x.A_Id)
           .HasConstraintName("FK_dbo.B_dbo.A_AId");
}

using (var context = _contextFactory.Create())
{
    A a;
    if (aDto.IsTransient)
    {
        a = context.AttachAsAdded<ADto>(aDto);
    }
    //await context.SaveChangesAsync();
    foreach (var bId in aDto.bIds)
    {
        context.AttachAsAdded(new B { a_Id = a.Id });
    }
    await context.SaveChangesAsync();
}

public TEntity AttachAsAdded<TEntity>(SimpleEntity dto)
            where TEntity : Entity, new()
        {
            var autoDetectChangesEnabled = ChangeTracker.AutoDetectChangesEnabled;
            ChangeTracker.AutoDetectChangesEnabled = false;

            var entity = new TEntity();
            var entry = Entry(entity);
            entry.CurrentValues.SetValues(dto);
            entry.State = EntityState.Added;

            ChangeTracker.AutoDetectChangesEnabled = autoDetectChangesEnabled;
            return entity;
        }

The INSERT statement conflicted with the FOREIGN KEY constraint "FK_dbo.B_dbo.A_AId". The conflict occurred in database "XXXX", table "dbo.A", column 'Id'. The statement has been terminated.”

标签: c#ef-core-3.1

解决方案


推荐阅读