开发者

Fluent nhibernate : Problems when deleting a HasOne relationship

开发者 https://www.devze.com 2023-02-22 22:21 出处:网络
I have two classes publicPartMap() { Id(x => x.ID).GeneratedBy.Guid(); HasOne(x => x.Stock) .Cascade.All();

I have two classes

public  PartMap()
{
   Id(x => x.ID).GeneratedBy.Guid();
   HasOne(x => x.Stock)
          .Cascade.All();
}

public Stock
{
  Id(x => x.ID).GeneratedBy.Guid();
  References(x => x.Part);
}

Part has only one开发者_运维问答 stock, that's the reason i used HasOne. The data is inserted ok, I have a part , a stock and they are saved ok. My problem is when trying to delete I get an error that the stock foreing key to part was violated

"ORA-02292: integrity constraint (PRINERGY.FK121AD9E59966BE23) violated " .

I see the it tries to delete the part without deleting the related stock before. How can I solve it?


It seems like a one-to-one bidirectional association. There are two ways how to map this association in NH (and FNH): primary key association and foreign key association. Your example is closer to foreign key association.

Foreign key association

public PartMap()
{
    Id(x => x.Id).GeneratedBy.Guid();
    References(x => x.Stock).Unique().Cascade.All();
    Map(x => x.Name);
}

public StockMap()
{
    Id(x => x.Id).GeneratedBy.Guid();
    HasOne(x => x.Part).Cascade.All().PropertyRef("Stock");
    Map(x => x.Name);
}

Primary key association

public PartMap()
{
    Id(x => x.Id).GeneratedBy.Guid();
    HasOne(x => x.Stock).Cascade.All();
    Map(x => x.Name);
}

public StockMap()
{
    Id(x => x.Id).GeneratedBy.Foreign("Part");
    HasOne(x => x.Part).Constrained();
    Map(x => x.Name);
}

For more details see http://fabiomaulo.blogspot.com/2010/03/conform-mapping-one-to-one.html.

0

精彩评论

暂无评论...
验证码 换一张
取 消