EF6 Dbcontext.SaveChanges在开发机器上运行但在发布时失败

时间:2015-02-16 17:10:04

标签: asp.net-mvc entity-framework

我有两个存储库功能,可以为客户添加和删除喜欢的产品。

public void AddProductToCustomer(int customerId, int productId) {
    var customer = _customers.GetById(customerId, 
      new []{ModelContents.FavoriteProducts});
    var product = _products.GetById(productId);
    customer.FavoriteProducts.Add(product);
    _context.SaveChanges();
}

public void RemoveProductFromCustomer(int customerId, int productId) {
    var customer = _customers.GetById(customerId, 
        new[] { ModelContents.FavoriteProducts });
    var product = _products.GetById(productId);
    customer.FavoriteProducts.Remove(product);
    _context.SaveChanges();
}

当我在本地针对生产数据库运行时,它工作正常,但是一旦我发布代码,_context.SaveChanges()无法更新数据库。我已远程调试此代码,并且没有从函数抛出或返回错误。有没有其他人见过这种行为?

[更新]如果失败,我的意思是数据库未使用customer.FavoriteProducts的更改进行更新。产品不会分别从列表中添加或删除,并且FavoriteProducts的总数永远不会更改,但仅在代码发布时,而不是在我的dev机器上针对同一数据库运行时。

我希望有帮助

[更新]在我看来,人们可能想知道new []{ModelContents.FavoriteProducts}行所指的是什么。这是一个枚举,它告诉客户存储库为模型填充哪些导航属性。客户是一个大对象,我并不总是想要它的所有数据。我已经确认在这些情况下填充了customer.FavoriteProducts

[更新]可能与此问题有关的一件事是产品模型还有一个Product.FavoritedBy导航集合,其中包含已收藏该产品的客户数量。就像Customer.FavoriteProducts一样,除了将应用程序发布到服务器之外,它在Customers FavoriteProducts集合中添加或删除时始终是最新的。实体关系是:

modelBuilder.Entity<CustomerUser>()
            .HasMany(u => u.FavoriteProducts)
            .WithMany(f => f.FavoritedBy)
            .Map(t => t.MapLeftKey("UserId")
                .MapRightKey("ProductId")
                .ToTable("FavoriteProducts"));

1 个答案:

答案 0 :(得分:-1)

AddProductToCustomer方法中尝试以下操作:

_context.Entry(customer).State = EntityState.Modified;
_context.SaveChanges();