[英]Entity Framework not saving changes
我有一個 MVC Web 應用程序,它使用 SQL Server 2008 作為后端數據庫以及實體框架。 該應用程序運行良好,從數據庫中提取數據也很好。 我的問題是,當它更新數據時,它似乎沒有保存它。 我正在使用以下功能:
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>
任何人對可能導致這種情況的原因有任何想法?
如果您使用插入/更新功能,則必須涵蓋這兩種情況:
if (product.ProductID == 0)
{
context.Entry(product).State = EntityState.Added;
}
else
{
context.Entry(product).State = EntityState.Modified;
}
context.SaveChanges();
感謝@veblok,我找到了問題的解決方案。 默認情況下,DbContext 類中有一個選項可以防止 EF 跟蹤對象。 刪除后,EF 開始按預期運行。
public class My Context : DbContext {
public MyContext()
{
// REMOVE this or use veblok's solution
this.Configuration.AutoDetectChangesEnabled = false;
}
...
}
您可以使用上下文的創建方法:當您有相關實體時,通常使用此方法
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
}
我有同樣的問題。 context.Entry(product).State = EntityState.Modified;
給了我一個錯誤。 有趣的解決方案是使用DbSetMigrationsExtensions.AddOrUpdate()
方法。 此方法是 DbSetMigrationExtensions 的一部分,您需要指定以下命名空間才能使用此擴展方法:
using System.Data.Entity.Migrations;
public void SaveProduct(Product product)
{
context.Set<Product>().AddOrUpdate(product);
context.SaveChanges();
}
確保你的表有一個主鍵。
如果是這樣,您將在 dbcontext 中找到這一行
entity.HasNoKey();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.