我正在嘗試迭代串列中的每一行,如果串列中的當前行在資料庫中還沒有記錄,則添加當前行,否則繼續下一次迭代。如何將串列中的當前行添加到我的 DbSet。
list.ForEach(x =>
{
objInsuredList = (from obj in _db.dbLifeData
where (obj.identifier == x.identifier) && (obj.plan == x.plan) && (obj.policyno == x.policyno)
select obj).ToList(); //get all existing record
var query = _db.dbLifeData.FirstOrDefault(y => y.identifier == x.identifier
&& y.policyno == x.policyno && y.plan == x.plan); //check current in list if it exists
if(query != null)
{
query.status = x.status;
_db.Entry(query).State = EntityState.Modified;
_db.SaveChanges();
}
else //current row has no record yet in the dbLifeData database
{
}
});
uj5u.com熱心網友回復:
在 EF Core 中,您必須知道您的物體,然后您需要以下代碼:
DbSet<Object>().Add(query);
efDataContext.SaveChanges();
uj5u.com熱心網友回復:
我建議改進你的代碼,否則你會有很大的性能問題。
將FilterByItems幫助程式擴展復制到您的代碼庫
// get existing items in one DB roundtrip
var existing = _db.dbLifeData
.FilterByItems(list, (obj, x) => (obj.identifier == x.identifier) && (obj.plan == x.plan) && (obj.policyno == x.policyno), true)
.AsEnumerable()
.ToDictionary(x => (x.identifier, x.plan, x.policyno));
foreach(var x in list)
{
var key = (x.identifier, x.plan, x.policyno);
if (existing.TryGetValue(key, out var found))
{
// EF Core smart enough to detect changes in properties
found.status = status;
}
else
{
var newRecord = new dbLifeData
{
status = x.status,
identifier = x.identifier,
plan = x.plan,
policyno = x.policyno
};
_db.dbLifeData.Add(newRecord);
}
}
// save everything in one batch
_db.SaveChanges();
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/497410.html
