Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc EF6 Dbcontext.SaveChanges可从开发计算机上运行,但在发布时失败_Asp.net Mvc_Entity Framework - Fatal编程技术网

Asp.net mvc EF6 Dbcontext.SaveChanges可从开发计算机上运行,但在发布时失败

Asp.net mvc EF6 Dbcontext.SaveChanges可从开发计算机上运行,但在发布时失败,asp.net-mvc,entity-framework,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

我有两个存储库函数,用于为客户添加和删除喜爱的产品

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();
}

当我在本地运行生产数据库时,它工作正常,但一旦我发布代码,
\u context.SaveChanges()
就无法更新数据库。我已经远程调试了这段代码,没有从函数中抛出或返回错误。以前有人见过这种行为吗

[更新]失败是指数据库没有随着对
customer.FavoriteProducts
的更改而更新。产品不会分别从列表中添加或删除,FavoriteProducts的总数也不会更改,但只有在代码发布时才会更改,而不是在我的开发人员计算机上针对同一数据库运行代码时

我希望这有帮助

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

[更新]可能与此问题相关的一件事是,产品型号还包含一个
产品.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"));
modelBuilder.Entity()
.HasMany(u=>u.FavoriteProducts)
.WithMany(f=>f.FavoritedBy)
.Map(t=>t.MapLeftKey(“用户ID”)
.MapRightKey(“产品ID”)
.ToTable(“优惠产品”);

在您的
将产品添加到客户
方法中尝试以下操作:

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

如果代码没有抛出任何异常,则很可能它正在写入与您正在检查的数据库不同的数据库。它肯定正在写入同一数据库。我查了四倍。我的所有其他存储库都工作得非常好(共有11个),那么原因在于您没有显示的代码。我不确定我们能在这里做什么,你显示的代码应该可以工作,除非你在没有显示的代码中做了一些奇怪的事情。在remove中,是否
customer.FavoriteProducts.Contains(product)
?我不签入此函数(我应该签入,你是对的),但发生的是在customer.FavoriteProducts.remove(product)之前和customer.FavoriteProducts.remove(product)之后的FavoriteProducts列表包含要删除的产品被称为“不”。总计数也减少了1。它在我的代码中工作。在SaveChanges()调用过程中,这个问题肯定发生在某个地方。我的代码中可能有问题,但它在本地计算机上对同一个数据库运行良好这一事实让我感到困惑。我不是处理数据库日志的专家。如果我试着通过它们,我会寻找什么。问题可能会出现在那里吗?
_context.Entry(customer).State = EntityState.Modified;
_context.SaveChanges();