в fluent-nhibernate, сохраняя сущность многие-к-одному, почему я должен дать версию для ссылочной сущности - PullRequest
0 голосов
/ 03 октября 2010

У меня есть следующие объекты:

public class Worker
{
 public int WorkerID {get;set;}
 public string Name { get;set;}
 public int version { get;set;}
}

public class TransferOrder
{
  public int TransferOrderID { get;set;}
  public Worker workerTobeTransfered{get;set;}
  public int version { get;set;}    
}

и я использую автоматическое отображение в беглом nhibernate. когда я пытаюсь сохранить TransferOrder следующим образом:

TransferOrder order = new TransferOrder();
order.Worker = new Worker(){WorkerID = 1};
Session.Save(order);

но в базе данных workerID в таблице TransferOrder равен NULL ??? но когда я даю версию работнику, она сохраняется как обычно?

TransferOrder order = new TransferOrder();
order.Worker = new Worker(){WorkerID = 1,Version = 1};
Session.Save(order);

обратите внимание, что не важно, какой номер версии дается работнику, если он не равен 0. и у меня есть работник, сохраненный в базе данных с workerID = 1.

как я могу справиться с этим? почему я должен дать версию работнику? nhibernate гарантирует, что работник спасен ?? и почему он должен это делать?

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

«Версия», вероятно, будет автоматически сопоставлена ​​с атрибутом NHibernate для оптимистической проверки параллелизма.Я бы использовал Fluent NHibernate для генерации сопоставления XML, чтобы увидеть, что он использует, поскольку я не могу найти в Google ничего о настройках по умолчанию для автоматического сопоставления.

0 голосов
/ 06 октября 2010

Может быть, это сценарий:

Ваш Work.WorkerID - это столбец идентификаторов в вашей рабочей таблице, и вы не можете вставить в таблицу строку, состоящую только из записи столбца идентификаторов.

Но когда вы также предоставляете значение для Work.Version, вы создаете допустимую вставку.

...