我有一个问题,我使用CultureInfo属性AutoMapping一个实体,当我尝试构建SessionFactory时,它抛出异常并出现以下错误: "表ExampleClass中的关联引用了一个未映射的类:System.Globalization.CultureInfo"
呼叫:
var configuration = new Configuration();
var sessionFactory = Fluently.Configure(configuration)
.Mappings(m =>
m.AutoMappings.Add(AutoMap.AssemblyOf<ExampleClass>(
new DefaultAutomappingConfiguration()
))
)
.BuildSessionFactory();
示例类:
public class ExampleClass
{
public virtual int Id { get; set; }
public virtual int ExampleClassId { get; set; }
public virtual string LineOne { get; set; }
public virtual CultureInfo Culture { get; set; }
}
如果我只是导出映射然后它正确显示映射,看起来System.Globalization.CultureInfo不包含在自动化策略中。
当手动覆盖类的映射时,它可以工作.Override(mapping =&gt; mapping.Map(x =&gt; x.Culture))。
有谁知道如何防止这种情况?或自动映射所有CultureInfo&#39; s?
答案 0 :(得分:4)
要使用NHibernate对CultureInfo
的映射支持(在那里,请参阅https://github.com/nhibernate/nhibernate-core/blob/c85d038dce8ba87bd3f4de2458b4ef6e2497f7f8/src/NHibernate/Type/CultureInfoType.cs),您需要通过以下方式告诉Fluent NHibernate您要使用它吗?遵循惯例:
using System.Globalization;
using FluentNHibernate.Conventions;
using FluentNHibernate.Conventions.AcceptanceCriteria;
using FluentNHibernate.Conventions.Inspections;
using FluentNHibernate.Conventions.Instances;
public class CultureInfoConvention : IUserTypeConvention
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(n => n.Property.PropertyType == typeof(CultureInfo));
}
public void Apply(IPropertyInstance instance)
{
instance.CustomType("CultureInfo");
}
}