NHibernate الإسقاط: كيفية الحصول على نوع كتابتها باستخدام API المعايير مع إسقاط

StackOverflow https://stackoverflow.com/questions/2260424

سؤال

 List<object[]> products = GetSession().CreateCriteria<Product>()
            .SetProjection(Projections.ProjectionList()
                               .Add(Projections.Property("Id"))
                               .Add(Projections.Property("Name"))
                               .Add(Projections.Property("Price"))
             )
             .List();
<اقتباس فقرة>
public class ProductRow
{
     public int Id { get; set; }
     public string Name { get; set; }
     public double Price { get; set; }
}

وكيف يمكنني الحصول على النتيجة كما في قائمة نوع؟

وأرى هناك وظيفة Projection.Cast، ولكن لا أرى أي وثائق حول كيفية استخدامها.

هل كانت مفيدة؟

المحلول

ويمكنك محاولة وضع محول النتيجة:

var result = GetSession()
    .CreateCriteria<Product>()
    .SetProjection(Projections.ProjectionList()
        .Add(Projections.Property("Id"), "Id")
        .Add(Projections.Property("Name"), "Name")
        .Add(Projections.Property("Price"), "Price")
    )
    .SetResultTransformer(Transformers.AliasToBean<ProductRow>())
    .List<ProductRow>();

ملحوظة في استخدام الاسم المستعار لافتا إلى اسم خاصية ProductRow عند إضافة كل الإسقاط.

نصائح أخرى

وأنا لم تكن قادرة على العثور على حل لهذه المشكلة على وجه التحديد. نشرت لي سؤال مماثلة وقبل أيام قليلة. (http://stackoverflow.com/questions/3921457/nhibernate-entity-access-through-projection) رسالة الخطأ بيكوس NHibernate تبحث عن الخاصية المسماة الفئة في فئة المنتج الخاص بك. أفترض ليس هناك واحد. وكانت أعمال بنيويورك حول I قادرة على العثور حتى الآن يستخدم DTO. كذلك، وتبحث في عمق مولدات DTO الحيوية والديناميكية LINQ إلى NHibernate استخدام الأشجار التعبير، لامبدا التعبير وأو ExpressionSelector. يبدو كلها معقدة نسبيا. وأود أن كان هناك حل بسيط للكيانات إعداد dynamiclly، أي الإسقاط.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top