亚音速和子表

时间:2009-06-22 12:03:01

标签: subsonic

我喜欢NHibernate能够让一个表基于鉴别器存储多种类型。当我获取一个RegularItem时,它将返回,因为鉴别器的子类型是正确的。

SubSonic有这种能力吗?

2 个答案:

答案 0 :(得分:1)

简短的回答是否定的,SubSonic没有内置此功能。您可以使用ExecuteTypedList<>重新创建它,但这将是很多手动工作(您可能会重写NH功能的大部分功能)。

答案 1 :(得分:1)

你的意思是,你有一个存储有不同值的表,并且依赖于你想要返回不同对象的值吗?

e.g。你有桌上的宠物

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

你想从中得到狗和猫的物品吗? 我有类似的情况,我通过创建一个Dog类和一个Cat类来解决它,它们都继承自亚音速自动生成的pet类并实现我的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);

   }

}

从内存中输入,不保证编译。但理论应该清楚。