私のプロジェクトでは、NHibernate 3.1とFluent NHibernateをORMとして使用しています。 Fluent NHibernateがPOCOのプロパティを無視する必要があります。最初は、私の投稿はthis questionの正確な複製と見えるかもしれませんが、そうではありません。FluentMappingsを使用して、Fluent NHibernateのClassMap内のプロパティを無視します
POCOがマッピングとは異なるアセンブリで定義され、私のPOCOのためにの流暢なマッピングを使用しているという事実から、まず合理化が行われます。私は、セッションファクトリの設定が行われる場所(これはモジュールの外にある中央の場所で行われます)ではなく、マッピングを定義するモジュールの一部として、ingore-propertyコードを記述しないという追加の要件があります。理想的には、正しい場所は具体的なClassMap
実装であると考えています。これは、POCOをORMに記述する方法を正確に把握しているためです。
しかし、これは主にNHibernateとその流暢なAPIに私の最初の影響であるため、私はこれに固執しています。今までは、その機能と拡張性について非常に良い印象を受けています。マッピング関連のコードが対応するモジュールにカプセル化されているという要件を達成する方法があることを願っています。ここで
が中心的な場所から、私の設定です:
List<Assembly> assemblies = GetModules().Select(x => x.GetType().Assembly).ToList();
ISessionFactory nhibernateSessionFactory = Fluently
.Configure()
.Mappings(m => assemblies.ForEach(asm => m.FluentMappings.AddFromAssembly(asm)))
.Database(
MsSqlConfiguration.MsSql2005
.ShowSql()
.ConnectionString(DatabaseConfig.Instance.ConnectionString))
.ExposeConfiguration(c => new SchemaUpdate(c).Execute(true, true))
.BuildSessionFactory();
私はClassMap
から継承する標準クラスのマッピングを使用します。
public class User
{
public virtual int ID { get; set; }
public virtual String Username { get; set; }
public virtual String Password { get; set; }
public virtual DateTime DateCreated { get; set; }
public virtual DateTime DateModified { get; set; }
// Must ignore
public string ComputedProperty { get { ... } }
}
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("User");
Id(x => x.ID).GeneratedBy.Identity();
Map(m => m.Username).Not.Nullable().Length(255).UniqueKey("User_Username_Unique_Key");
Map(m => m.Password).Not.Nullable().Length(255);
Map(m => m.DateCreated).Not.Nullable();
Map(m => m.DateModified).Not.Nullable();
}
}
マッピングクラスはどのように見えますか?設定はどのように見えますか? – shanabus
私はいくつかのコードを追加して私の質問に再訪しました –
も参照してください:http://stackoverflow.com/questions/5830649/how-do-you-make-nhibernate-ignore-a-property-in-a-poco – caspian311