私は、次の列挙型があります:私はNHibernateはを使用してデータベースにこのタイプのインスタンスを永続化したいFluentのNHibernateからのAutoMappingがenum型を無視するのはなぜですか?
public class X
{
public virtual int? Id { get; set; }
public virtual EnumType EnumProperty { get; set; }
public virtual string S { get; set; }
}
:以下のクラスで使用
public enum EnumType
{
E1,
E2
}
を。そして、定型的なコードを書くことを避けるために、私は次のように自動マッピング機能を使用しようとしている:
MyAutoMappingConfiguration
はこのようになります
private ISessionFactory CreateSessionFactory()
{
var mappings = AutoMap
.AssemblyOf<Domain.X>(new MyAutoMappingConfiguration());
this.NHibernateConfiguration = Fluently
.Configure()
.Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2012.ConnectionString(
b => b.FromConnectionStringWithKey("x")))
.Mappings(m => m.AutoMappings.Add(mappings))
.BuildConfiguration();
return this.NHibernateConfiguration.BuildSessionFactory();
}
:私は作成するには、この設定から生成されたスキーマを使用する場合
public class MyAutoMappingConfiguration: FluentNHibernate.Automapping.DefaultAutomappingConfiguration
{
public override bool ShouldMap(Type type)
{
return type.Namespace == "Domain";
}
public override bool IsComponent(Type type)
{
return type.Name == "EnumType";
}
}
データベース:
new SchemaExport(this.sessionProvider.NHibernateConfiguration)
.Execute(true, true, false);
次のスクリプトが生成され、実行されている:
if exists (select * from dbo.sysobjects where id = object_id(N'[X]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [X]
create table [X] (
Id INT not null,
S NVARCHAR(255) null,
primary key (Id)
)
なぜEnumProperty
は無視されますか? (等価思える)
私はX
のための明示的なマッピングを追加したり、このような自動マッピングのためオーバーライド:
var mappings = AutoMap
.AssemblyOf<Domain.X>(new MyAutoMappingConfiguration())
.Override<Domain.X>(m =>
{
m.Table("X");
m.Id(x => x.Id);
m.Map(x => x.EnumProperty); // this works
m.Map(x => x.S);
});
スクリプトが正しく生成されます。
if exists (select * from dbo.sysobjects where id = object_id(N'[X]') and OBJECTPROPERTY(id, N'IsUserTable') = 1) drop table [X]
create table [X] (
Id INT not null,
EnumProperty NVARCHAR(255) null,
S NVARCHAR(255) null,
primary key (Id)
)
このショーは提示されたenumを正しくマップするNHibernateの能力には何も問題はないようです。なぜこれに自動マッピングできないのですか?
私はMyAutoMappingConfiguration
に次のメソッドを追加する場合:
public override bool ShouldMap(Member member)
{
var result = base.ShouldMap(member);
return result;
}
とブレークポイントを置いて、result
は何とか後に無視されますEnumProperty
メンバー、のためtrue
です。
(ビットカウンタ - 直感的です)何らかの理由で、オートマッピングを使用すると、デフォルトで無効になっているようです。 https://groups.google.com/forum/#!topic/fluent-nhibernate/NJo0FiWXEwY – Najera
@Najera [DeJaVoの回答](http://stackoverflow.com/a/34714996/2642204)の下の私のコメントを参照してください。 – BartoszKP
mehodが実行されると、空ですが、デリゲートが実行されていますか?はいの場合、あなたの財産は評価されますか? – Najera