2009-04-20 10 views
5

NHibernate kullanarak bir veritabanına devam ettiğim bir sınıfım var. Web uygulamasında, Sipariş'ten gelen bir nesneyi içeren bir klasör var, bizim amacımız için, CustomOrder diyebiliriz. UI amaçlarına yönelik sipariş nesnesine birkaç özellik yerleştirmek için CustomOrder kullanıyorum. Özelliklerin aslında veritabanına kaydedilmesi gerekmez.NHibernate Inherited Class ama ısrar etmeye gerek yok

Bilinmeyen varlık sınıfı: CustomOrder

Ben sadece bir Sipariş nesnesinde NHibernate şikayet alır benim jenerik kaydetme yöntemine CustomOrder sınıfını geçtikten sonra.

Özel alanları veritabanına devam ettirmem gerekmiyor, ancak bu devralma yapısını korumak istiyorum. Yanlış koşullarda mı düşünüyorum yoksa yapmamam gereken bir şey mi yapıyorum? Yöntemin ilk satırda durumda sonra Kaydet Kod

public object Save(Order obj, object userID) { 
     Order o = (Order)obj; 
     ISession session = NHibernateHelper.GetCurrentSession(); 
     ITransaction tx = session.BeginTransaction(); 

     session.Save(o); 

, .NET hala CustomerOrder olarak tanımlar.

cevap

2
  1. .NET'te bir örnek türünü değiştiremezsiniz. Döküm veya mümkün kılan hiçbir şey yok.
  2. Örneği DB'den yüklerken, NHibernate depoladığınız aynı türü oluşturmak ister. Bu yüzden CustomOrder için bir haritalama istiyor.

Bunu nasıl uygularsınız: Yeni bir Sipariş Örneği oluşturmanız gerekir.

// get the CustomOrder from somewhere 
CustomOrder customOrder; 
// create an instance of Order and store it. 
session.Save(customOrder.GetOrder()); 


class CustomOrder 
{ 

    // just one of many ways: a method on the CustomOrder to create 
    // instance of Order 
    public GetOrder() 
    { 
     return new Order() 
     { 
      property1 = this.property1, 
      property2 = this.property2, 
      property3 = this.property3 
     } 
    } 
} 

Yansıma işlemini otomatik olarak yapmak için kullanabilirsiniz. Veya MemberwiseClone()'a bir göz atın.

+0

+1 bu tam olarak ne önereceğim (ve bunu başarmanın tek yolu). –

0

Biraz zaman geçti, ancak türetilmiş sınıfın, hazırda bulunan eşleme dosyasındaki temel sınıfın bir nesnesi olarak kalıcı olması gerektiğini belirtebileceğine inanıyorum.

+0

Bir alt sınıf için bir ayrımcı sağlamak zorunda kalmanın bir çözümü var mı? – Josh

İlgili konular