2015-01-14 111 views
3

我有一個問題,我是AutoMapping實體與CultureInfo屬性,當我嘗試構建SessionFactory它會拋出異常,並出現以下錯誤: 「來自表ExampleClass的關聯指的是未映射的類: System.Globalization.CultureInfo」Fluent NHibernate AutoMap CultureInfo

電話:

var configuration = new Configuration(); 
     var sessionFactory = Fluently.Configure(configuration) 
      .Mappings(m => 
       m.AutoMappings.Add(AutoMap.AssemblyOf<ExampleClass>(
        new DefaultAutomappingConfiguration() 
       )) 
      ) 
      .BuildSessionFactory(); 

Example類:

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 => mapping.Map(x => x.Culture))。

有誰知道如何防止這種情況?或者自動映射所有CultureInfo的?

回答

3

要使用NHibernate的映射支持CultureInfo(這是存在的,見https://github.com/nhibernate/nhibernate-core/blob/c85d038dce8ba87bd3f4de2458b4ef6e2497f7f8/src/NHibernate/Type/CultureInfoType.cs),你需要告訴流利的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"); 
    } 
} 
+0

如何使用它? –