سؤال

ما هي أفضل طريقة للحصول على السلوك العكسي من نوع YesNo منطقية في رسم الخرائط NHibernate؟

وأريد 'Y' على أنها تعني كاذبة و'N' على أنها تعني صحيح.

هل هناك نوع نويس؟ لا تكتب النوع المخصص؟ شيء من السهل حقا؟

وهذه قضية تحتاج إلى عكس منطقية موجود على حقل واحد على الأقل على أكثر من 40 الجداول. في محاولة للتكيف مع قاعدة بيانات القديمة.

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

المحلول

ولقد وجدت أن التعامل مع تنسيقات البيانات غريبة في قواعد البيانات إرث يمكن أن يتحقق بسهولة عن طريق تنفيذ الأنواع المخصصة. على سبيل المثال، ومؤخرا قدمت من النوع المستخدم بسيط لخريطة DateTime إلى 8 أرقام أرقام على yyyyMMdd النموذج، الذي تصادف والطريقة التي تم تخزين التواريخ في تفريغ DB2 اضطررت لاستخدام.

ولوس التقنيين دينا مثال على تنفيذ IUserType التي يمكنك استخدامها في حل مشكلتك: <لأ href = "http://www.lostechies.com/blogs/rhouston/archive/2008/03/23/mapping-strings "يختلط =" noreferrer "-to باستخدام-nhibernate-ق-iusertype.aspx القيم المنطقية-> رسم الخرائط سلاسل إلى القيم المنطقية باستخدام NHibernate في IUserType .

نصائح أخرى

وكان لي مشكلة مماثلة. كان أسهل الحلول التي وجدت تمديد CharBooelanType من NHibernate واستخدام نوع جديد على التعيين. وسيكون مثل ما يلي:

using NHibernate.Type;
using NHibernate.SqlTypes;

namespace MyAssembly.MyNamespace 
{
    public class NewBoolType : CharBooleanType 
    {
        public NewBoolType()
            : base(new AnsiStringFixedLengthSqlType(1)) { }

        protected override string TrueString 
        {
            get { return "N"; }
        }

        protected override string FalseString 
        {
            get { return "Y"; }
        }

        public override string Name 
        {
            get { return "inverted_bool"; }
        }
    }
}

وأن التعيين سيكون مثل ما يلي:

<property name="MyProperty" column="MyColumn" type="MyAssembly.MyNamespace.NewBoolType, MyAssembly" />
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top