NHibernate الإسقاط: كيفية الحصول على نوع كتابتها باستخدام API المعايير مع إسقاط
-
20-09-2019 - |
سؤال
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، أي الإسقاط.