流利的NHibernate AutoMap CultureInfo

时间:2015-01-14 14:09:22

标签: fluent-nhibernate fluent-nhibernate-mapping

我有一个问题,我使用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?

1 个答案:

答案 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");
    }
}