Дозвуковые и вспомогательные таблицы - PullRequest
0 голосов
/ 22 июня 2009

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

Есть ли у SubSonic такая способность?

Ответы [ 2 ]

1 голос
/ 24 июня 2009

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

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

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

а вы хотите получить от нее предметы для собак и кошек?
У меня похожий случай, и я решил его, создав класс Dog и класс Cat, которые оба наследуют от автоматически сгенерированного класса petics subsonic и реализуют мою заглушку интерфейса 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);

   }

}

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

1 голос
/ 22 июня 2009

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

...