में मानचित्रण दृश्यों के लिए रणनीतियां ऐसा लगता है कि एनएचबीरनेट को मैपिंग के हिस्से के रूप में निर्दिष्ट एक आईडी टैग होना चाहिए। यह विचारों के लिए एक समस्या प्रस्तुत करता है क्योंकि अधिकांश समय (मेरे अनुभव में) एक दृश्य में आईडी नहीं होगी। मैंने निबर्ननेट में पहले विचारों को मैप किया है, लेकिन जिस तरह से मैंने ऐसा किया वह मेरे लिए गन्दा लग रहा था।एनएचबीरनेट
यहां दूषित उदाहरण है कि मैं वर्तमान में इसे कैसे कर रहा हूं।
मानचित्रण
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" >
<generator class="guid.comb" />
</id>
<property name="Name" />
<!-- more properties -->
</class>
देखें एसक्यूएल
Select NewID() as Id, ProductName as Name, --More columns
From Product
कक्षा
public class ProductView
{
public virtual Id {get; set;}
public virtual Name {get; set;}
}
मैं पी के लिए एक आईडी की जरूरत नहीं है roduct या कुछ विचारों के मामले में मेरे पास दृश्य के लिए आईडी नहीं हो सकती है, इस पर निर्भर करता है कि मेरे पास
पर नियंत्रण है या नहीं, क्या निबर्ननेट में ऑब्जेक्ट्स पर मैपिंग दृश्यों का बेहतर तरीका है?
संपादित
जवाब अब तक
मानचित्रण
<class name="ProductView" table="viewProduct" mutable="false" >
<id name="Id" type="Guid" />
<property name="Name" />
<!-- more properties -->
</class>
कक्षा
public class ProductView
{
public virtual Name {get; set;}
//more properties
}
एसक्यूएल देखें
क्या मुझे अभी भी नया आईडी() चाहिए?
Select NewID() as Id, ProductName as Name, --More columns
From Product
क्या इसका मतलब यह है कि मैं टीआईएसक्यूएल चयन से न्यूआईडी() को हटा सकता हूं क्योंकि यह केवल आईडी –
नंबर पर निबर्ननेट की आवश्यकता को पूरा करने के लिए है, इसका मतलब है कि आपकी कक्षा को आईडी संपत्ति की आवश्यकता नहीं है। –
बेन का अधिकार। NHibernate को किसी संपत्ति पर मैप किए जाने वाले आईडी की आवश्यकता नहीं है, लेकिन इसे लगातार उदाहरणों की पहचान करने के लिए हमेशा एक तरीका चाहिए। –