当我保存具有一对多(HasMany)关系的实体时,在数据库上会重复寄存器。
PedidoVenda表的图片:
ItemPedidoVenda表的图片:
我可以在这张照片中看到问题是因为ItemPedidoVenda的id是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 :(得分:0)
将ItemPedidoVenda实例添加到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);
}
}
}