使用EF6.1,我有一個表正與如下組合鍵:帶複合鍵的Upsert?
如何運行使用實體框架的更新插入方法?
我已經寫了下面的方法,但我讀過,它不應該被用於upserts,僅遷移(請忽略設計模式現在):
public void UpsertNumberOfMarkets(List<Entities.NumberOfMarkets> marketsList)
{
using (MyDbContext db = new MyDbContext())
{
foreach (var market in marketsList)
{
db.NumberOfMarkets.AddOrUpdate(market);
}
}
}
我也不能確定它工作正常。有什麼想法嗎?我想避免刪除和插入,因爲我們有更新的審計日誌表。
編輯:我寫了下面的方法可以處理這個 - 這是首選的方法?
public void UpsertNumberOfMarkets(List<Entities.NumberOfMarkets> marketsList)
{
using (MyDbContext db = new MyDbContext())
{
foreach (var market in marketsList)
{
var predicate = PredicateBuilder.True<Entities.NumberOfMarkets>();
predicate = predicate.And(n => n.ProjectId == market.ProjectId);
predicate = predicate.And(n => n.Year == market.Year);
var existingMarketEntry = db.NumberOfMarkets.AsExpandable().Where(predicate).FirstOrDefault();
if (existingMarketEntry != null)
existingMarketEntry.Markets = market.Markets;
else
{
db.NumberOfMarkets.Add(market);
}
}
db.SaveChanges();
}
}
唯一的事情就是existingMarketEntry.Markets = market.Markets;不應覆蓋現有MarketEntry的主鍵值。在這種情況下,它可能不起作用。 – Jags 2014-11-05 15:45:41