Структура предприятия 5. Обновите многих многим, отношения дают нарушение первичного ключа

Я видел многих, вопрос как этот, но на тех людях называл.Add метод на многих многим отношениями, которые я не. Я использую 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().
    HasMany(p => p.Promotions).
    WithMany(s => s.Branches).
    Map(
    m =>
    {
      m.MapLeftKey("BranchId");
      m.MapRightKey("PromotionId");
      m.ToTable("Branch_Promotion");
    });

modelBuilder.Entity().
    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
nl ja de

2 ответы

Добавление этого решило его:

var promotion = Uow.Promotions.GetByPredicateIncluding(p => p.Id == promotionDto.Id, a => a.CreditCards, a => a.Branches).ToList().FirstOrDefault();

Который загружает связанные предприятия.

Кажется, что они должны быть загружены для Структуры Предприятия, чтобы знать, новые ли они или нет.

Если у кого-то есть лучшее объяснение, пожалуйста, не стесняйтесь добавлять любой комментарий.

С наилучшими пожеланиями. Гильермо.

0
добавлено

Добавление этого решило его:

var promotion = Uow.Promotions.GetByPredicateIncluding(p => p.Id == promotionDto.Id, a => a.CreditCards, a => a.Branches).ToList().FirstOrDefault();

Который загружает связанные предприятия.

Кажется, что они должны быть загружены для Структуры Предприятия, чтобы знать, новые ли они или нет.

Если у кого-то есть лучшее объяснение, пожалуйста, не стесняйтесь добавлять любой комментарий.

С наилучшими пожеланиями. Гильермо.

0
добавлено