0

В моей иерархии животныхFluent NHibernate отображение наследования

Базовых один:

public class AnimalMap : ClassMap<Animal> 
{ 
    public AnimalMap() 
    { 
     Schema("dbo"); 
     Table("Animals"); 

     Id(x => x.Id).Column("ID").GeneratedBy.Identity(); 
     Map(x => x.FoodClassification).Column("FoodClassification"); 
     Map(x => x.BirthDate).Column("BirthDate"); 
     Map(x => x.Family).Column("Family"); 

     DiscriminateSubClassesOnColumn("ClassType").Not.Nullable();  
    } 
} 

Один подкласс:

public class DogMap : SubclassMap<Dog> 
{ 
    public DogMap() 
    { 
      DiscriminatorValue(@"Dog"); 
      Map(x => x.Field).Column("Field"); 
    } 
} 

Так что вопрос:

Где столбец " ClassType "! = Dog, Animal должен быть типом объекта, как базовый. У каждого, у кого нет класса отображения, должен быть базовый (супер).

Как это сделать?

+0

Я не думаю, что это возможно, если у вас есть класс типа 'Жираф: Animal', как бы значение столбца если вы никогда не указывали значение дискриминатора для жирафа. – Matthew

+0

, но что делать, если мне не нужна классификация для всех, кто не является собакой? я имею в виду каждый ?, даже жираф, должен быть животным, но не жирафом. – Roar

+0

. Каким будет значение дискриминатора для других типов? – Matthew

ответ

1

важно: делать это только для поддержки старых схем и животных является только для чтения

public class SomeAnimal : Animal 
{ 

} 

public class AnimalMap : ClassMap<Animal> 
{ 
    public AnimalMap() 
    { 
     Schema("dbo"); 
     Table("Animals"); 

     Id(x => x.Id).Column("ID").GeneratedBy.Identity(); 
     Map(x => x.FoodClassification).Column("FoodClassification"); 
     Map(x => x.BirthDate).Column("BirthDate"); 
     Map(x => x.Family).Column("Family"); 

     DiscriminateSubClassesOnColumn().Formula("IIF(classtype = 'dog', 'dog', 'someAnimal')"); 
    } 
} 

public class SomeAnimalMap : SubclassMap<SomeAnimal> 
{ 
    public SomeAnimalMap() 
    { 
      ReadOnly(); 

      DiscriminatorValue("someAnimal"); 
      Map(x => x.ClassType).Column("classtype"); 
    } 
} 
+0

см. Решение, но вопрос в том, как избежать этого? – Roar

+0

Избегайте указания всех значений подкласса в Формуле или дополнительном классе SomeAnimal? – Firo

+0

дополнительный класс SomeAnimal – Roar

 Смежные вопросы

  • Нет связанных вопросов^_^