سؤال

ولدي الطريقة التي سيعود قائمة الطلبات المقترحة. إذا مرت المستخدم فارغة أن يتم تجاهل المعايير.

public IList<SuggestedOrderItem> GetSuggestedOrderItemByCriteria
        (
            int? itemNumber,
            int? deptNumber            
        )
    {
        try
        {
            NHibernate.ICriteria criteria = NHibernateSession.CreateCriteria(typeof(Core.SuggestedOrderItem));

            if (itemNumber.HasValue)
                criteria.CreateCriteria("Item", "Item").Add(Expression.Eq("Item.ItemNumber", itemNumber.Value));

            if (deptNumber.HasValue)
                criteria.CreateCriteria("Item.Department", "Department").Add(Expression.Eq("Department.DepartmentNumber", deptNumber.Value));

            return criteria.List<Core.SuggestedOrderItem>();
        }
        catch (NHibernate.HibernateException he)
        {
            DataAccessException dae = new DataAccessException("NHibernate Exception", he);
            throw dae;                
        }

    }

إذا كنت توفير معايير، كل شيء يعمل بشكل جيد. بالغرامة التي أعني فإنه يسترد أوامر اقترح الصحيحة وأنهم جميعا لديهم أرقام الإصدارات المختلفة. إذا كان كل المعايير فارغة فإنه يسترد جميع أوامر اقترح كما ينبغي، لكن الأرقام الإصدار هي كل نفس. يعمل مطور آخر على واجهة المستخدم وانه استدعاء الأسلوب أعلاه لملء الشاشة مع جميع أوامر بحيث يمكن للمستخدم اختيار واحد لتعديل. عندما أحصل على طلب تحديث له على الرغم من أنني أشعر أنها ترفض رقم الإصدار لا تطابق إصدار الفعلي للكائن. هذه هي الطريقة التي يبدو العمود الإصدار في ملف التعيين:

<version name="Version" type="Int64" generated="always" column="ORA_ROWSCN" access="property" unsaved-value="0"/>

وشكرا جزيلا على أي مساعدة!

وUPDATE:

وأنا تحميل nhprof لمعرفة ما إذا كان الاستعلام SQL يتم إنشاء في كل حالة كان مختلفا. بغض النظر عن ما إذا كنت تمر أي معايير أو أفعل توفير المعايير التي هي نفسها تماما باستثناء بند فيها. عندما ركضت كل من الاستعلامات في محرر ديسيبل، حصلت على نفس النتائج كنت أشاهده من خدمة بلدي. هل هذا نوع من قضية أوراكل غريبة؟ إذا كنت إدراج بند حيث أحصل على أرقام ora_rowscn مختلفة، وإلا فإنها هي كل نفس.

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

المحلول

وتبين أن هناك نوعا من مشكلة عند استخدام ANSI SQL (أنا ضرب على 10G ديسيبل أوراكل). أضفت الخاصية التالية إلى بلدي app.config في محاولة للحصول nhibernate عدم استخدام ANSI:

<property name="use_outer_join">false</property>

ولكن هذا لم يساعد. ثم قال لي:

<property name="max_fetch_depth">0</property>

وهناك إصابات أكثر ديسيبل الآن، ولكن أرقام إصدار يعودون كما هو متوقع.

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