【发布时间】:2012-03-15 20:18:05
【问题描述】:
我在我的项目中使用 NHibernate 3.1 和 Fluent NHibernate 作为 ORM。我需要一个被 Fluent NHibernate 忽略的 POCO 的属性。起初,我的帖子可能看起来与this question 完全相同,但事实并非如此。
我的复杂性首先来自 POCO 是在与映射不同的程序集中定义的事实,并且我正在为我的 POCO 使用 fluent 映射。我还有一个额外的要求,不要在会话工厂配置发生的地方编写 ingore-property 代码(这发生在模块外部的集中位置),而是作为定义映射的模块的一部分。理想情况下,我相信正确的地方是具体的ClassMap 实现,因为它确切地知道如何向 ORM 描述 POCO。
但是,我之所以坚持这一点,主要是因为这是我对 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();
}
}
【问题讨论】:
-
你的映射类是什么样的,你的配置是什么样的?
-
我通过添加一些代码重新审视了我的问题
标签: c# nhibernate orm fluent-nhibernate