Entity Framework не сохраняет изменения
У меня есть веб-приложение MVC, которое использует SQL Server 2008 в качестве базы данных на задней панели вместе с Entity Framework. Приложение работает нормально и извлекает данные из базы данных очень хорошо. Моя проблема в том, что когда она обновляет данные, она, похоже, не сохраняет ее. Я использую следующую функцию:
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
context.Products.Add(product);
}
context.SaveChanges(); // Breakpoint here
}
Эта функция определена в моем коде репозитория. Я установил точку останова в строке, прокомментированной выше, и приложение разбивается на строку, поэтому я знаю, что она ударяет по этой строке, и все изменения хороши в контексте объекта. Ошибка не возникает, EF просто не сохраняет изменения по какой-либо причине.
Я считаю, что моя строка подключения правильная, поскольку ее вытягивание данных просто отлично, но здесь это на всякий случай:
<connectionStrings>
<add name="EFDbContext" connectionString="Data Source=localhost;Initial Catalog=WarehouseStore;Integrated Security=True;Pooling=False" providerName="System.Data.SqlClient"/>
</connectionStrings>
У кого-нибудь есть идеи о том, что может это сделать?
Ответы
Ответ 1
Если вы после функциональности вставки/обновления, вы должны обойти оба случая:
if (product.ProductID == 0)
{
context.Entry(product).State = EntityState.Added;
}
else
{
context.Entry(product).State = EntityState.Modified;
}
context.SaveChanges();
Ответ 2
Благодаря @veblok я нашел решение своей проблемы.
В классе DbContext есть опция, позволяющая предотвратить EF для отслеживания объекта по умолчанию.
После удаления EF начал вести себя так, как ожидалось.
public class My Context : DbContext {
public MyContext()
{
// REMOVE this or use veblok solution
this.Configuration.AutoDetectChangesEnabled = false;
}
...
}
Ответ 3
вы можете использовать метод создания метода: используйте этот метод, как правило, когда у вас есть связанный объект
public void SaveProduct(Product product)
{
if (product.ProductID == 0)
{
product = context.Products.Create();
product.property = ...;
product.property = ...;
context.Products.Add(product);
}
context.SaveChanges(); // Breakpoint here
}