我已经看到很多像这样的问题了,但是那些人正在打电话。添加方法就多对多关系我不是。我正在使用WebApi
我想调用.Clear()然后在实体框架5中重新添加更新的实体,或者它应该是自动的,我做错了什么?
我正在使用工作单元和通用的实体框架存储库模式。
这是相关代码:
public HttpResponseMessage Put(PromDto promDto)
{
var creditCardsIds = string.IsNullOrEmpty(promDto.CreditCards) ? null : promDto.CreditCards.Split(',').Select(int.Parse);
var branchesIds = string.IsNullOrEmpty(promDto.Branches) ? null : promDto.Branches.Split(',').Select(int.Parse);
var promotion = Uow.Promotions.GetById(promDto.Id);
promotion.CreditCards = creditCardsIds != null ? Uow.CreditCards.GetByPredicate(t => creditCardsIds.Contains(t.Id)).ToList() : null;
promotion.Branches = branchesIds != null ? Uow.Branches.GetByPredicate(t => branchesIds.Contains(t.Id)).ToList() : null;
if (ModelState.IsValid)
{
Uow.Promotions.Update(promotion);
Uow.Commit();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
在上下文中
modelBuilder.Entity<Branch>().
HasMany(p => p.Promotions).
WithMany(s => s.Branches).
Map(
m =>
{
m.MapLeftKey("BranchId");
m.MapRightKey("PromotionId");
m.ToTable("Branch_Promotion");
});
modelBuilder.Entity<Promotion>().
HasMany(tt => tt.CreditCards).
WithMany(p => p.Promotions).
Map(
m =>
{
m.MapLeftKey("PromotionId");
m.MapRightKey("CreditCardId");
m.ToTable("Promotion_CreditCard");
});
我想打电话给这个吗?
promocion.CreditCards.Clear();
promocion.Branches.Clear();
提前致谢。吉列尔莫。
答案 0 :(得分:0)
添加此解决了它:
var promotion = Uow.Promotions.GetByPredicateIncluding(p => p.Id == promotionDto.Id, a => a.CreditCards, a => a.Branches).ToList().FirstOrDefault();
加载相关的实体。
似乎需要加载它们才能让Entity Framework知道它们是否是新的。
如果有人有更好的解释,请随时添加任何评论。
最诚挚的问候。吉列尔莫。