मैं निम्नलिखित वर्ग है:चयन पर अद्यतन करने से रोकें?
public class Product
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual Decimal PricePerMonth { get; set; }
public virtual BillingInterval DefaultBillingInterval { get; set; }
public virtual string AdditionalInfo { get; set; }
}
और मानचित्रण इस तरह दिखता है:
<class name="Product" table="Products">
<id name="Id" column="ProductId">
<generator class="guid.comb"/>
</id>
<property name="Name" column="ProductName" not-null="true" type="String" />
<property name="PricePerMonth" column="PricePerMonth" not-null="true" type="Decimal" />
<property name="DefaultBillingInterval" type="int" not-null="true" />
<property name="AdditionalInfo" type="string" not-null="false" />
</class>
मैं निम्न विधि (Session
एक संपत्ति है कि मौजूदा सत्र देता है) के साथ एक Repository<T>
वर्ग का उपयोग करें:
public IEnumerable<T> FindAll(DetachedCriteria criteria)
{
return criteria.GetExecutableCriteria(Session).List<T>();
}
अब जब मैं निम्नलिखित करता हूं (सत्र वही सत्र भंडार में उपयोग किया जाता है):
IEnumerable<ProductDTO> productDTOs = null;
using(ITransaction tx = session.BeginTransaction(IsolationLevel.ReadCommitted))
{
var products = repository.FindAll(new DetachedCriteria.For<Product>().Add(Restrictions.Like("Name", "Some Product%")));
productDTOs = ToDTOs(products);
tx.Commit();
}
// Do stuff with DTO's
प्रतिबद्ध बयान नहीं है, क्योंकि मैं एक सेवा परत यदि कोई त्रुटियां हुईं जो स्वचालित रूप से हर लेन-देन करता है का उपयोग करें। मैं सिर्फ आसान दृश्य के लिए यहाँ मेरी सेवा परत ढह ..
मेरे ToDTOs
विधि बस एक डीटीओ में धर्मान्तरित:
2010-01-04 19:13:11,140 [4] DEBUG NHibernate.SQL - SELECT ... From Products ...
2010-01-04 19:13:11,237 [4] DEBUG NHibernate.SQL - UPDATE Products ...
2010-01-04 19:13:11,548 [4] DEBUG NHibernate.SQL - UPDATE Products ...
...
का चयन करके
तो:
private IEnumerable<ProductDTO> ToDTO(IEnumerable<Product> products)
{
return products.Select(x => new ProductDTO()
{
Id = x.Id,
Name = x.Name,
PricePerMonth = x.PricePerMonth,
AdditionalInfo = x.AdditionalInfo
}).ToList();
}
मेरे nhibernate लॉग निम्नलिखित उत्पादन से पता चलता उत्पाद जब यह काम करता है, तो प्रत्येक उत्पाद के लिए एक अद्यतन कथन जारी करता है, भले ही उत्पादों में कुछ भी नहीं बदला गया है ..
कोई विचार?
क्या यह वास्तव में * इकाई को कैसे कार्यान्वित किया जाता है? मैं तुम पर विश्वास नहीं करता हूँ। –
यह है ... सच है, मेरे पास ऑर्डर की एक सूची थी जिस पर उत्पाद संलग्न किया गया था, लेकिन मैंने कक्षा और मैपिंग (जैसे यहां दिखाया गया) दोनों से यह सूची हटा दी है और यह वही परिणाम है .. मेरा भ्रम इस तथ्य से और भी गहरा है कि यह मेरी अन्य संस्थाओं के साथ नहीं होता है .. –