Свободный nhibernate: проблемы при удалении отношения HasOne - PullRequest
1 голос
/ 07 апреля 2011

У меня есть два класса

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 Ответ

4 голосов
/ 07 апреля 2011

Это похоже на двустороннюю ассоциацию.Существует два способа сопоставления этой ассоциации в 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.

...