Fluent nhibernate:删除HasOne关系时出现问题

时间:2011-04-07 09:10:40

标签: fluent-nhibernate foreign-keys

我有两个班级

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);
}

部分只有一个股票,这就是我使用HasOne的原因。 数据插入好,我有一个零件,一个股票,他们保存好了。 我的问题是,当我试图删除时,我收到了一个错误,该错误导致部分股票被违反

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

我看到它试图删除部件而不删除之前的相关股票。 我该如何解决?

1 个答案:

答案 0 :(得分:4)

这似乎是一对一的双向关联。有两种方法如何在NH(和FNH)中映射此关联:主键关联和外键关联。您的示例更接近外键关联。

外键关联

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);
}

主要关键字

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);
}

有关详细信息,请参阅http://fabiomaulo.blogspot.com/2010/03/conform-mapping-one-to-one.html