سؤال

ولدي الأساسي العملاء / ترتيب / OrderItem / المنتج كائن الرسم البياني. العميل لديه العديد من أوامر، أمر له العديد من عناصر النظام، المنتج لديها العديد من عناصر النظام. يتم تعيين هذه بنجاح باستخدام FNH.

ولقد اصطدم بعقبة مع تكوين الإجراء المخزن ويجيد-nhibernate. ليست هناك طريقة الأم في الخريطة الإجراءات المخزنة في يجيد-السبات FNH (الإصدار 1.0 RTM). كان هناك حل <لأ href = "http://maonet.wordpress.com/2009/05/06/create-your-own-parts-to-merge-stored-procedure-into-fluent-nhibernate-mappings/" يختلط = "نوفولو noreferrer"> هنا حول إضافة أجزاء لتعيينات الفئة ولكن لم يتخذ الدعوة AddPart من الإفراج عن FNH.

والإجراء المخزن بسيط:

CREATE PROCEDURE [dbo].[OrderCountByCustomer] 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        c.name as [Customer.Name],
        CAST(count(o.id) as NVARCHAR) as [Customer.OrderCount]
    FROM customer c
        LEFT OUTER JOIN [order] o
        ON o.customer_id = c.id
    GROUP BY c.name

END

وهناك من CustomerOrderSummary.hbm.xml في

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NVAble.Orders.Core" namespace="NVAble.Orders.Core">
    <sql-query name="OrderSummary">
        <return class="CustomerOrderSummary">
            <return-property column="Customer.Name" name="CustomerName" />
            <return-property column="Customer.OrderCount" name="OrderCount" /> 
        </return>
        EXEC [OrderCountByCustomer]
    </sql-query>
</hibernate-mapping>

وهنا هو مواطنه الطبقة CustomerOrderSummary:

namespace NVAble.Orders.Core
{
    public class CustomerOrderSummary
    {
        virtual public string CustomerName { get; set; }
        virtual public string OrderCount { get; set; }

        public override string ToString()
        {
            return string.Format("{0} {1}", CustomerName, OrderCount);
        }
    }
}

ولكن، عند محاولة بدء جلسة NH أحصل على خطأ في OrderSummary الاستعلام اسمه مع أي تفاصيل أخرى.

وأنا على الأرجح في عداد المفقودين شيء بسيط حقا أن خرائط الطبقة CustomerOrderSummary لهذا الإجراء، لا أعرف. هذا الكائن نطاق الواضح لا يعين مباشرة إلى جدول في قاعدة البيانات لذلك أنا غير متأكد إذا كان وجود تعيين <class /> HBM العادي ستعمل؟

ويرجع الفضل في ذلك مسبقا!

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

المحلول

وطيب، وذلك بعد أكثر قليلا من التحقيق. أنا في حاجة إلى رسم خرائط للفئة المجال فضلا عن تسمية ملف hbm.xml الاستعلام.

في صفي تكوين لدي

config.Mappings(x =>
{
    x.FluentMappings.AddFromAssemblyOf<CustomerMapping>().ExportTo(schemaPath);
    x.HbmMappings.AddFromAssemblyOf<CustomerOrderSummary>();
});

والجانب السلبي الوحيد هو أنني بحاجة إلى إنشاء مخطط XML يدويا الإجراء المخزن، وأنا لا يمكن استخدام FNH في الوقت الحالي

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