C# 实体框架核心2.1-保存一对多相关记录时出错
我已经配置了一对多关系,如下所述。但是,SQL表中没有实际的外键集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
//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可能在完成操作之前被处置。看起来这就是问题所在。我会尽快发布相关代码。