0

我遵循了我在 Julie Lermans 的书 Programming Entity Framework: Dbcontext 中读到的 EF 存储库模式

我有一个名为 Customer 的实体,它与实体收藏夹具有多对多关系

这是客户更新的一些示例代码

customer.CustomerLocation_ID = 5;     

customer.Favourites.clear();

customer.State = State.Modified;
customerRepository.InsertOrUpdate(customer);

然后插入将执行以下操作:

Entry(entity).State = EntityState.Modified;

foreach (var entity in this.ChangeTracker.Entries<IEntityState>())
{
    IEntityState stateInfo = entity.Entity;
    entity.State = StateHelpers.ConvertState(stateInfo.State);
}

然后最后:

context.SaveChanges();

保存时,我在收藏夹上得到一个唯一键异常,因为收藏夹名称是唯一的。但我没有在收藏夹中添加任何内容。

当我删除 .clear() 行时,一切都很好。

更新:

我在这段代码中添加了只是尝试了一些东西,现在它可以工作了。

foreach (var fav in customer.Favourites)
{
     fav.State = State.Modified;
}

这是否意味着即使我影响了客户,我仍然需要将收藏夹标记为已修改,以便跟踪和更新它们?我只是不认为我必须这样做。

4

1 回答 1

0

如果您使用的是实体框架,它应该像这样做一样简单:

using(var myContext = new MySiteDbContextClassName())
{
     var selectedCustomer = myContext.Customers.FirstOrDefault(x => x.CustomerId == someCustomerId);

     if(selectedCustomer != null)
     {
          selectedCustomer.Favorites.Clear();
          myContext.SaveChanges();
     }
}

如果这不起作用,那么听起来您的配置/映射有问题,您需要检查您的配置。

于 2012-10-31T17:04:27.617 回答