Когда вы автоматически отображаете коллекцию с помощью Fluent NHibernate, как сделать внешний ключ ребенка для родительского элемента обнуляемым? - PullRequest
0 голосов
/ 26 июня 2010

Если у меня есть родительский класс:

public class Parent
{
    public Parent()
    {
        Children = new List<Child>();
    }

    IList<Child> Children {get; private set;}
}

и дочерний класс, например:

public class Child
{
     public SomeThirdClass Friend {get; set;}
}

Всякий раз, когда я позволяю автомату Fluent NHibernate бить этих парней, он делаетКласс 1007 * имеет ненулевой внешний ключ.Я изменил несколько соглашений об автоматическом преобразовании и некоторые переопределения для определенных классов, но для этой конкретной пары переопределение имеет только класс Parent.Переопределение не указывает, как отобразить часть коллекции для класса Parent.

Делает внешний ключ, не допускающий значения NULL, в дочернем элементе коллекции поведением по умолчанию, или я что-то исправил?

Как можно указать в классе переопределения сопоставления, чтодочерний внешний ключ может иметь значение NULL?

PEACE!

Ответы [ 2 ]

3 голосов
/ 28 июня 2010

Вы пробовали это:

   public class ChildMap : IAutoMappingOverride<Child>
   {
       public void Override(AutoMapping<Child> mapping)
       {
           mapping.References(x => x.OtherThing)
               .Nullable();
       }
   }

Если вы хотите установить его по умолчанию для всех ваших внешних ключей, вы можете использовать это:

0 голосов
/ 30 июня 2010

Мне удалось решить эту проблему, удалив беглое отображение 4-го класса GrandParent и позволив автопроизводителю отобразить этот класс.Раньше я не позволял автопроизводителю отображать класс GrandParent, потому что у меня было свободное отображение этого класса.Каким-то образом этот конфликт между беглым отображением и автоматическим отображением привел к тому, что внешний ключ в Child не был обнуляемым.

Я не могу сказать, что полностью понимаю, что пошло не так, поэтому следует соблюдать осторожность при следовании моему решению.Но я могу сказать, что объединение Fluent Mappings и Automappings определенно увеличивает сложность отладки проблем персистентности.

Альтернативное решение: я столкнулся с этой проблемой еще два раза, и заметил, что если я вызову KeyColumn(string columnName) в IAutoMappingOverride для Parent, внешний ключ в дочернем классе по умолчанию будет иметь значение Nullable,а не не-ноль.Сумасшедший, да?

...