Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架核心2.1-保存一对多相关记录时出错_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 实体框架核心2.1-保存一对多相关记录时出错

C# 实体框架核心2.1-保存一对多相关记录时出错,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我已经配置了一对多关系,如下所述。但是,SQL表中没有实际的外键集 //Parent Entity public partial class Summary { public Summary() { DetailRecords = new HashSet<Details>(); } public Guid DocUnid { get; set; } //Some other columns public ICollect

我已经配置了一对多关系,如下所述。但是,SQL表中没有实际的外键集

//Parent Entity
public partial class Summary
{
    public Summary()
    {
        DetailRecords = new HashSet<Details>();
    }
    public Guid DocUnid { get; set; }
    //Some other columns
    public ICollection<Details> DetailRecords { get; set; }
}

//Child Entity
public partial class Details
{
    public Guid DocUnid { get; set; }
    public Guid ParentRecordUnid { get; set; }
    //Some other columns
    public Summary SummaryRecord { get; set; }
}

//Code from DbContext class
modelBuilder.Entity<Details>(entity =>
{
    entity.HasKey(e => e.DocUnid);
    entity.ToTable("Details", "App");

    entity.Property(e => e.DocUnid)
        .HasColumnName("DocUNID")
        .HasDefaultValueSql("(newid())");

    entity.Property(e => e.ParentRecordUnid).HasColumnName("ParentRecordUNID");

    entity.HasOne(x => x.SummaryRecord)
    .WithMany(y => y.DetailRecords)
    .HasForeignKey(z => z.ParentRecordUnid);
});

modelBuilder.Entity<Summary>(entity =>
{
    entity.HasKey(e => e.DocUnid);

    entity.ToTable("Summary", "App");

    entity.Property(e => e.DocUnid)
        .HasColumnName("DocUNID")
        .HasDefaultValueSql("(newid())");
    //Tried below code also
    //entity.HasMany(x => x.DetailRecords)
    //.WithOne(y => y.SummaryRecord)
    //.HasForeignKey(z => z.ParentRecordUnid);
});


//Code to save records
public async void Save(ViewModel viewModel)
{
    var summary = Mapper.Map<Summary>(viewModel);
    foreach (Details row in summary.DetailRecords)
    {
        //Setting some other column values here
    }
    await _unitOfWork.Summaries.AddAsync(summary);
    await _unitOfWork.CompleteAsync(default(CancellationToken));
}
//父实体
公开部分课程摘要
{
公开摘要()
{
DetailRecords=新的HashSet();
}
公共Guid DocUnid{get;set;}
//其他一些专栏
公共ICollection DetailRecords{get;set;}
}
//子实体
公共部分类详细信息
{
公共Guid DocUnid{get;set;}
公共Guid ParentRecordUnid{get;set;}
//其他一些专栏
公共摘要摘要记录{get;set;}
}
//来自DbContext类的代码
modelBuilder.Entity(Entity=>
{
entity.HasKey(e=>e.DocUnid);
实体。ToTable(“详细信息”、“应用程序”);
entity.Property(e=>e.DocUnid)
.HasColumnName(“DocUNID”)
.HasDefaultValueSql(“(newid())”)”;
Property(e=>e.ParentRecordUnid).HasColumnName(“ParentRecordUnid”);
entity.HasOne(x=>x.SummaryRecord)
.WithMany(y=>y.DetailRecords)
.HasForeignKey(z=>z.ParentRecordUnid);
});
modelBuilder.Entity(Entity=>
{
entity.HasKey(e=>e.DocUnid);
实体。汇总表(“摘要”、“应用程序”);
entity.Property(e=>e.DocUnid)
.HasColumnName(“DocUNID”)
.HasDefaultValueSql(“(newid())”)”;
//也尝试了下面的代码
//entity.HasMany(x=>x.DetailRecords)
//.WithOne(y=>y.SummaryRecord)
//.HasForeignKey(z=>z.ParentRecordUnid);
});
//保存记录的代码
公共异步无效保存(ViewModel ViewModel)
{
var summary=Mapper.Map(viewModel);
foreach(summary.DetailRecords中的详细信息行)
{
//在此处设置其他一些列值
}
wait_unitOfWork.Summaries.AddAsync(summary);
wait_unitOfWork.CompleteAsync(默认值(CancellationToken));
}
它表示“执行DbCommand失败”,后面是“System.InvalidOperationException:无效操作。连接已关闭”

我不确定我在这里做错了什么。我只是想知道EF Core 2.1目前是否支持这种操作

更新:

我删除了导航属性,以确保错误与一对多关系无关。我仍然得到以下错误

应用程序>失败:Microsoft.EntityFrameworkCore.Database.Transaction[20205] 应用>使用事务时发生错误。 App>System.InvalidOperationException:此SqlTransaction已 完整的;它不再可用。应用>在 System.Data.SqlClient.SqlTransaction.ZombieCheck()App>at System.Data.SqlClient.SqlTransaction.Commit()App>at Microsoft.EntityFrameworkCore.Storage.RelationalTransaction.Commit()


添加调用
Save
方法的代码<代码>\u unitOfWork可能在完成操作之前被处置。看起来这就是问题所在。我会尽快发布相关代码。