我正在使用.NET Entity Framework 6(EF6)将父/子数据加载到数据库中。
CVE是一个“父”实体,它有多个与之关联的子项(例如“引用”和“CVSS分数”)。一旦我的上下文加载了我要保存的所有ojbects(CVE及其相关的子项),我调用“SaveChanges”然后想知道有多少父实体(CVE)插入到数据库中。
不幸的是,“SaveChanges”方法返回添加的对象总数。我只想知道添加的CVE(父对象)的数量。
这是我的代码;
internal static int LoadCVEs(IEnumerable<CVE> cves)
{
using (var context = new NVDEntities())
{
try
{
foreach(var cve in cves)
{
var existingCVE = context.CVEs.Find(cve.CveID);
//Check if CVE already exists.
if (existingCVE != null)
{
//Check to see if this record was recently modified. If so, then replace the entire record with the latest one.
if (DateTimeOffset.Compare(cve.ModifiedDate.Value, existingCVE.ModifiedDate.Value) > 0)
{
//CVE has been recently modified. Replace the outdated record.
context.CVEs.Remove(existingCVE);
context.CVEs.Add(cve);
}
}
else
{
//CVE is new. Insert it.
context.CVEs.Add(cve);
}
}
context.SaveChanges();
}
}
除此之外,我尝试了以下内容;
context.CVEs.Where(c => context.Entry(c).State == EntityState.Added).Count()
但是返回以下错误;
发生了类型为“System.NotSupportedException”的未处理异常 在EntityFramework.SqlServer.dll
中其他信息:LINQ to Entities无法识别该方法 “System.Data.Entity.Infrastructure.DbEntityEntry`1 [NVDImport.Models.CVE] EntryCVE'的方法,这种方法不可能 翻译成商店表达。
如何获得已添加的CVE(父对象)总数?
答案 0 :(得分:1)
也许是这样的?
在DbContext继承类中,您想要覆盖SaveChanges()方法:
public override int SaveChanges()
{
int cveCount = ChangeTracker.Entries<CVE>().Where(argEntry => argEntry.State == EntityState.Added).Count();
base.SaveChanges();
return cveCount;
}