1

1対多(HasMany)の関係を持つエンティティを保存すると、データベース上のレジスタは複製されます。 PedidoVenda表の1対多マッピングを使用した流暢なnhibernateの登録

画像:

enter image description here

ItemPedidoVenda表の画像:私はこの中で見ることができます

enter image description here

はItemPedidoVendaのidが1つの順方向であるため、問題があることを描写しその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のアイテムリストに追加するには、ItemPedidoVendaのPedidoプロパティを正しいインスタンスに設定する必要があります。

私はあなたがそれをしていないと確信しています。

私が主にしていることは、私の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); 
     } 
    } 

}

:私はあなたの場合には、このよう

をセットすることをお勧めしたいです

関連する問題