Я использую NHibernate 3.1 и Fluent NHibernate в качестве ORM в моем проекте. Мне нужно, чтобы свойство POCO игнорировалось Fluent NHibernate. Сначала мой пост может выглядеть как точная копия этого вопроса , но это не так.
Мои осложнения возникают в первую очередь из-за того, что POCO определены в сборке, отличной от отображения, и я использую плавные отображения для моих POCO. У меня есть дополнительное требование не писать код свойства ingore, где конфигурация фабрики сеанса имеет место (это происходит в централизованном месте вне модулей), а как часть модуля, который определяет отображения. В идеале я считаю, что правильным местом будет конкретная реализация 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();
}
}