Использование EF6.1, я работаю с таблицей с составным ключом, как показано ниже:Усиление композитным ключом?
Как запустить метод upsert с помощью Entity Framework?
Я написал следующий метод, но я читал, что она не должна быть использована для upserts, только Миграции (не обращайте внимание на шаблон проектирования в настоящее время):
public void UpsertNumberOfMarkets(List<Entities.NumberOfMarkets> marketsList)
{
using (MyDbContext db = new MyDbContext())
{
foreach (var market in marketsList)
{
db.NumberOfMarkets.AddOrUpdate(market);
}
}
}
Я тоже не уверен что он работает правильно. Есть предположения? Я бы хотел избежать удаления и вставки, поскольку у нас есть таблица ведения журнала аудита для обновлений.
EDIT: Я написал следующий метод, который может справиться с этим - это предпочтительный подход?
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; не должны перезаписывать значения первичного ключа для existingMarketEntry. В этом случае он может не работать. – Jags