我有两个存储库功能,可以为客户添加和删除喜欢的产品。
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"));
答案 0 :(得分:-1)
在AddProductToCustomer
方法中尝试以下操作:
_context.Entry(customer).State = EntityState.Modified;
_context.SaveChanges();