我有一个在Entity Framework中保存数据的问题。
我已经写好了一个函数,覆盖了我的dbContext的saveChanges函数,因为我用它来设置一些审计数据和做其他工作。在某种情况下,我遇到了麻烦。
我需要为每个新记录插入一些记录到另一个表中,并引用一个外键与新记录相关联。如果只有一条新记录,一切都正常。但如果有两条或更多记录,我会遇到错误。
我使用循环来遍历所有新记录,如下所示:
我已经写好了一个函数,覆盖了我的dbContext的saveChanges函数,因为我用它来设置一些审计数据和做其他工作。在某种情况下,我遇到了麻烦。
我需要为每个新记录插入一些记录到另一个表中,并引用一个外键与新记录相关联。如果只有一条新记录,一切都正常。但如果有两条或更多记录,我会遇到错误。
我使用循环来遍历所有新记录,如下所示:
var addedAuditedEntities = ChangeTracker.Entries()
.Where(p => p.State == EntityState.Added)
.Select(p => p.Entity);
foreach (var added in addedAuditedEntities)
{
.....
}
我写下了我的尝试。
1)这种方式在第二个新记录处出现错误,说“TabAssVeicoliTerminali”标签页中已经有唯一数据(它是一个拥有IDTER-IDTEV对上独特索引的表格),我认为是因为它插入所有IDTEV = 0的临时记录。
else if (added.GetType() == typeof(TabTessereVeicoli))
{
TabTessereVeicoli i = (TabTessereVeicoli)added;
i.DATA_INS = now;
i.USER_INS = mdlImpostazioni.p.UserName;
var listaterV = new List<TabAssVeicoliTerminali>();
foreach (var ter in MainWindow.dbContext.TabTerminali)
{
var tt = new TabAssVeicoliTerminali();
tt.MODIFICATO = true;
tt.ABILITATO = true;
tt.IDTER = ter.ID;
tt.IDTEV = i.ID;
tt.DATA_INS = now;
tt.USER_INS = mdlImpostazioni.p.UserName;
listaterV.Add(tt);
}
MainWindow.dbContext.BulkInsert(listaterV);
}
2) 我之前尝试过保存,试图设置新记录的ID(它是自动增量ID),并在IDTEV外键中使用“!= 0”的某些内容。但是,它保存了所有内容,包括其他新记录。因此,它正确地将fk保存在其他表中,但仅适用于第一个新记录:
else if (added.GetType() == typeof(TabTessereVeicoli))
{
TabTessereVeicoli i = (TabTessereVeicoli)added;
i.DATA_INS = now;
i.USER_INS = mdlImpostazioni.p.UserName;
var listaterV = new List<TabAssVeicoliTerminali>();
base.SaveChanges();
foreach (var ter in MainWindow.dbContext.TabTerminali)
{
var tt = new TabAssVeicoliTerminali();
tt.MODIFICATO = true;
tt.ABILITATO = true;
tt.IDTER = ter.ID;
tt.IDTEV = i.ID;
tt.DATA_INS = now;
tt.USER_INS = mdlImpostazioni.p.UserName;
listaterV.Add(tt);
}
MainWindow.dbContext.BulkInsert(listaterV);
}
3) 我也尝试过不使用BulkInsert,但结果相同。
我该如何达成我的目标呢?
ParentEntity.Children.Add(childEntity);
的方式来实现你的一对多关系,其中ParentEntity.Children
是你的导航属性。 - Ben Robinson