Reputation: 9776
I love NHibernate's ability to have one table to store multiple types based on a discriminator. When I fetch an RegularItem, it will come back as the sub type of the discriminator is correct.
Does SubSonic have this ability?
Upvotes: 0
Views: 185
Reputation: 31723
Do you mean, you have a table with different values stored in it and, dependend on a value you want to return different objects?
e.g. you have a table pet
id type name
---------------------
1 dog bello
2 cat scott
3 cat tiger
and you want to get dog and cat objects from it?
I have a similar case, and I solved it by creating a Dog class and a Cat class that both inherit from subsonic's autogenerated pet class and implement my IPet interface stub, in conjunction with a factory method, where I cast my objects to the new Type:
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);
}
}
Typed from memory, not guaranteed to compile. But the theory should be clear.
Upvotes: 1
Reputation: 78104
The short answer is no, SubSonic does not have this feature built-in. You might be able to sort of recreate that with ExecuteTypedList<>, but it would be a lot of manual work (you'd probably be rewriting most of the functionality of the NH feature).
Upvotes: 1