2009-06-22 73 views
0

我喜歡NHibernate的基於鑑別器有一個表來存儲多種類型的能力。當我獲取一個RegularItem時,它會回來,因爲鑑別器的子類型是正確的。亞音速和子表

SubSonic有這種能力嗎?

回答

1

你的意思是說,你有一個表中存儲着不同的值,並且依賴於你想要返回不同對象的值?

例如你有一個表寵物

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

你想從它得到狗和貓的對象?
我有一個類似的情況,我通過創建一個Dog類和一個Cat類來解決它,它們都從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); 

    } 

} 

從內存中鍵入,不保證編譯。但理論應該清楚。

+0

我改變了一點例子,因爲它不起作用(你可以把狗當作寵物,但不是寵物給狗)。 – 2009-06-25 07:24:38

1

簡短答案是否定的,SubSonic沒有內置此功能。你也許可以用ExecuteTypedList>來重新創建,但是這將需要很多手工工作(你可能會重寫NH功能的大部分功能)。