Как сделать наследование в беглом NH без столбца типа дискриминатора - PullRequest
0 голосов
/ 08 июня 2011

У меня есть 2 класса:

public class MyBaseClass
{
    public virtual int Id  { get; set; }
    public virtual string BaseProperty { get; set; }
}

public class MyClass : MyBaseClass
{
    public virtual string ChildProperty { get; set; }
}

Я хочу отобразить каждый из них на свой собственный стол (беглый NH). Как это сделать без добавления столбца типа дискриминатора в таблицу [MyBaseClass]? Поэтому я ожидаю, что таблица [MyBaseClass] состоит только из столбцов BaseProperty и Id, MyClass состоит из столбцов Id, BaseProperty и ChildProperty.

Спасибо

Ответы [ 2 ]

0 голосов
/ 08 июня 2011

Я только что нашел это (http://wiki.fluentnhibernate.org/Fluent_mapping#Components):

public class Parent
{
  public int Id { get; set; }
  public string Name { get; set; }
}

public class Child : Parent
{
  public string AnotherProperty { get; set; }
}

Если вы хотите отобразить это как таблицу на подкласс, вы бы сделали это так:

public class ParentMap : ClassMap<Parent>
{
  public ParentMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
  }
}

public class ChildMap : SubclassMap<Child>
{
  public ChildMap()
  {
    Map(x => x.AnotherProperty);
  }
}

Похоже, что этот подход не требует каких-либо изменений в БД, таких как добавление специальных полей в мои таблицы. Единственная проблема в том, что я не знаю, как сделать то же самое в AutoMapping с операторами Override. Мы делаем отображениевот так:

public class AutoMappingConfiguration : DefaultAutomappingConfiguration
{
    public override bool IsDiscriminated(Type type)
    {
        return true;
    }

    public override bool ShouldMap(Type type)
    {
        return type.In(typeof(MyBaseClass),typeof(MyClass),...)
    }
...
}

FluentNHibernate.Automapping.AutoPersistenceModel Instance =
            AutoMap.AssemblyOf<MyBaseClass>(new AutoMappingConfiguration())             
    .Override<MyBaseClass>(m =>
{
        ...
    }
}

Так что я не уверен, как применить инструкцию подкласса в моем случае. Любой совет?

Спасибо.

0 голосов
/ 08 июня 2011

Вы можете попытаться поставить IgnoreBase на MyBaseClass. Для FNH будет сказано отображать эти классы независимо

...