Subsonic 亚音速和分表

Subsonic 亚音速和分表,subsonic,Subsonic,我喜欢NHibernate基于鉴别器拥有一个表来存储多种类型的能力。当我获取正则项时,它将返回,因为鉴别器的子类型是正确的 亚音速有这种能力吗?简单的回答是没有,亚音速没有内置这种功能。您可能可以使用ExecuteTypedList重新创建它,但这需要大量的手动工作(您可能要重写NH功能的大部分功能)。您的意思是,您有一个存储有不同值的表,并且根据要返回不同对象的值,表中存储了不同的值 e、 你有一个餐桌宠物 id type name ---------------------

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


亚音速有这种能力吗?

简单的回答是没有,亚音速没有内置这种功能。您可能可以使用ExecuteTypedList重新创建它,但这需要大量的手动工作(您可能要重写NH功能的大部分功能)。

您的意思是,您有一个存储有不同值的表,并且根据要返回不同对象的值,表中存储了不同的值

e、 你有一个餐桌宠物

id     type     name
---------------------
1      dog      bello  
2      cat      scott  
3      cat      tiger  
你想从中得到狗和猫的东西吗?
我有一个类似的例子,我通过创建一个Dog类和一个Cat类解决了这个问题,这两个类都继承自subsonic的自动生成的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);

   }

}
公共类狗:宠物,IPet{}
公共类猫:宠物,IPet{}
公共接口IPet{}
公共静态IPet GetAllPets()
{
列表宠物=新列表();
PetCollection.FetchAll()中的每个宠物
{
IPet-newpet;
如果(宠物类型==“狗”)
新宠物=新狗();
否则如果(pet.Type==“cat”)
新宠物=新猫();
否则抛出新的InvalidOperationException(“未知宠物类型”+宠物类型);
pet.CopyTo(newpet);
newpet.MarkOld();
pets.Add(newpet);
}
}

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

我稍微改变了这个例子,因为它不起作用(你可以把狗当成宠物,但不能把宠物变成狗)。