في Fluent NHibernate كيف يمكنك الجمع بين الأنواع التلقائية والأنواع غير المعينة تلقائيًا؟

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

سؤال

أقوم حاليًا بتبديل مشروعي من أسلوب nhibernate الكلاسيكي بطلاقة لتحديد ملف ClassMap لكل كيان مجال، لكي يقوم مصمم الخرائط التلقائي بإنشاء التعيينات تلقائيًا لي.لكنني أرغب في الاستمرار في استخدام الفئات التي قمت بتعيينها بالفعل بالنمط الكلاسيكي، حتى أتمكن من تعديل التعيينات التلقائية لتتناسب مع التعيينات الكلاسيكية القديمة.

المشكلة الوحيدة هي أن nhibernate بطلاقة يتعطل عندما يصل مصمم الخرائط التلقائي إلى فئة تم تعيينها بالفعل بأسلوب nhibernate الكلاسيكي بطلاقة.

هنا بلدي AutoPersistenceModel رمز الإعداد:

_autoPersistenceModel = AutoMap.AssemblyOf<DomainEntity>();
_autoPersistenceModel.AddMappingsFromAssembly(typeof (PlayerPersistenceMap).Assembly);

_autoPersistenceModel.Alterations(x =>
                    x.Add<AutoMappingAlteration>())
                .Setup(s =>
                {
                    s.FindIdentity = type => type.Name == "ID";

                    s.IsBaseType = type => (type == typeof(DomainEntity));
                })
                .Conventions
                    .AddFromAssemblyOf<IdentityColumnConvention>()
                    .UseOverridesFromAssemblyOf<PlayerMappingOverride>();

هل يمكن لأحد أن يساعدني هنا؟

مزيد من المعلومات:

لقد قمت أيضًا بتجربة التقنية المذكورة في موقع wiki بطلاقة هنا.للأسف ما زلت أتلقى الخطأ: Duplicate class/entity mapping.

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

المحلول

ال تعيينات مختلطة بطلاقة ومثال على التعيينات التلقائية في الويكي يجب أن يعمل، إذا لم يعمل فهذا يعني أن هناك خطأ.

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

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => type != typeof(OneOfYourManuallyMappedClasses));

إذا كان لديك الكثير من التعيينات بطلاقة، فيمكنك إنشاء مجموعة للحفاظ على إعداد التعيين التلقائي نظيفًا:

var mappedTypes = new[] { typeof(One), typeof(Two) };

AutoMap.AssemblyOf<DomainEntity>()
  .Where(type => !mappedTypes.Contains(type));

مرة أخرى، لا ينبغي أن يكون هذا ضروريًا، ولكن إذا كنت متأكدًا من أنه لا يعمل مع مثال wiki، فأنا أقترح إثارة مشكلة.

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