2009-06-22 2 views
0

Мне нравится способность NHibernate иметь одну таблицу для хранения нескольких типов на основе дискриминатора. Когда я получаю RegularItem, он возвращается, когда подтип дискриминатора корректен.Подзвуковые и вспомогательные таблицы

Имеет ли SubSonic эту способность?

ответ

1

Вы имеете в виду, что у вас есть таблица с различными значениями, хранящимися в ней, и зависит от значения, которое вы хотите вернуть различным объектам?

например. у вас есть стол домашнее животное

id  type  name 
--------------------- 
1  dog  bello 
2  cat  scott 
3  cat  tiger 

и вы хотите получить от него предметы собаки и кошки?
У меня есть аналогичный случай, и я решил его, создав класс Dog и класс Cat, которые наследуются от автогенерированного класса домашних животных дозвукового класса и реализуют мой заглушку интерфейса IPet в сочетании с заводским методом, где я отбрасываю свои объекты на новый Тип:

public Class Dog : Pet, IPet { } 
public Class Cat : Pet, IPet { } 
public Interface IPet { } 

public static IPet GetAllPets() 
{ 

    List<IPet> pets = new List<IPet>(); 

    foreach Pet pet in PetCollection.FetchAll() 
    { 

     IPet newpet; 

     if (pet.Type == "dog") 
      newpet = new Dog(); 
     else if (pet.Type == "cat") 
      newpet = new Cat(); 
     else throw new InvalidOperationException("Unknown pet type " + pet.Type); 

     pet.CopyTo(newpet); 
     newpet.MarkOld(); 

     pets.Add(newpet); 

    } 

} 

Напечатано в памяти, не гарантируется скомпилировать. Но теория должна быть ясной.

+0

Я немного изменил пример, потому что он не сработает (вы можете бросить собаку как домашнее животное, но не домашнее животное собаке). –

1

Короткий ответ - нет, SubSonic не имеет встроенной функции. Возможно, вы сможете сортировать воссоздание с помощью ExecuteTypedList <>, но было бы много ручной работы (вы, вероятно, переписываете большую часть функциональности функции NH).

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