لماذا يتجاهل Nhibernate بطلاقة اتفاقي؟
-
28-09-2019 - |
سؤال
لدي مؤتمر UserTypeConvention<MyUserType>
أين MyUserType : IUserType
أين MyUserType
يتعامل مع نوع التعداد MyEnum
. لقد قمت بتكوين nhibernate بطلاقة وبالتالي
sessionFactory = Fluently
.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(
c => c.Is(connectionString))
)
.Mappings(
m => m
.FluentMappings
.AddFromAssemblyOf<A>()
.Conventions
.AddFromAssemblyOf<A>()
)
.BuildSessionFactory();
أين A
هو نوع في نفس التجميع مثل UserTypeConvention<MyUserType>
و MyUserType
. ومع ذلك ، فإن nhibernate بطلاقة لا ينطبق MyUserType
لخصائص النوع MyEnum
على كائنات النطاق الخاصة بي. بدلاً من ذلك ، يتم تطبيقه FluentNHibernate.Mapping.GenericEnumMapper<MyEnumType>
لهذه الخصائص.
ما الذي يجري؟
المحلول
في الوقت الحالي ، قمت بحل هذا مع:
public class MyEnumUserTypeConvention : UserTypeConvention<MyEnumUserType> {
public override void Accept(IAcceptanceCriteria<IPropertyInspector> criteria) {
// Fluent NHibernate is too eager in applying GenericEnumMapper
// so our criteria is that it is already applied this type
criteria.Expect(x => x.Type == typeof(GenericEnumMapper<MyEnum>));
}
public override void Apply(IPropertyInstance instance) {
// we override Fluent NHibernate's application of GenericEnumMapper
instance.CustomType<MyEnumUserType>();
}
}
أعتقد أن هذا يجب أن يكون غير ضروري تمامًا. إذا أخبرني أحدهم أن هذا كان خطأً في Nhibernate بطلاقة ، فسيكون ذلك جيدًا. إذا أعطاني أحدهم سببًا جيدًا لوجود Nhibernate بطلاقة يجب أن يكون حريصًا جدًا في التقديم GenericEnumMapper
سيكون ذلك مقبولًا أيضًا.
نصائح أخرى
حسنًا ، لقد جربت ما يلي وأعتقد أنه سينجح لك:
لقد تجاوزت للتو طريقة القبول في فئة myenumusertypeconvention ولا تفعل شيئًا بداخلها:
public class MyEnumUserTypeConvention : UserTypeConvention<MyEnumUserType>
{
public override void Accept(FluentNHibernate.Conventions.AcceptanceCriteria.IAcceptanceCriteria<FluentNHibernate.Conventions.Inspections.IPropertyInspector> criteria)
{
///Do nothing
}
}