1

Когда я сохраняю объект, который имеет отношение «один ко многим» (HasMany), в базе данных регистры дублируются.Свободные повторяющиеся регистры с символом «один ко многим»

Изображение PedidoVenda таблице:

enter image description here

Изображение ItemPedidoVenda Таблица:

enter image description here

Я могу видеть в этой фотографии, что проблема в том, что идентификатор ItemPedidoVenda является один вперед это PedidoVenda id. Но это автоматически сохраняется. Что это может быть?

Мои свойства в классах являются следующие:

public class PedidoVenda { 

    public virtual IList<ItemPedidoVenda> Itens { get; set; } 
    ... 
} 

public class ItemPedidoVenda { 

    public virtual PedidoVenda Pedido { get; set; } 
    ... 
} 

В картостроители:

PedidoVendaMapper:

HasMany(x => x.Itens) 
     .KeyColumn("PEDIDO_ID") 
     .Inverse() 
     .Cascade.All(); 

ItemPedidoVendaMapper:

References(x => x.Pedido) 
      .Column("PEDIDO_ID").Cascade.All(); 

ответ

0

При добавлении ItemP edidoVenda в список предметов в PedidoVenda, вы должны убедиться, что вы установили свойство Pedido в ItemPedidoVenda на правильный экземпляр.

Я уверен, что вы этого не делаете.

Что я в основном делаю, не позволяет пользователю моего API (программиста :)) не добавлять элементы в список напрямую. Вместо этого я пишу метод Addxxx, который добавляет элементы в список.

Рядом с этим вы должны убедиться, что используете правильный тип коллекции. я хотел бы предложить набор в вашем случае

Как это:

public class PedidoVenda { 

    private ISet<ItemPedidoVenda> _itens = new HashedSet<ItemPedidoVenda>(); 

    // The public property which returns the collection is a REadOnlyCollection so the user cannot mess around with it. 
    public ReadOnlyCollection<ItemPedidoVenda> Itens 
    { 
     get 
     { 
      return new List<ItemPedidoVenda>(_itens).AsReadOnly(); 
     } 
    } 

    public void AddPedido(ItemPedidoVenda item) 
    { 
     if(_itens.Contains(item) == false) 
     { 
      item.Pedido = this; // Here, make sure that the reference is filled out. 
      _itens.Add(item); 
     } 
    } 

}

 Смежные вопросы

  • Нет связанных вопросов^_^