[英]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.