1
我有这样一个身份映射这样:Id属性
Id(x => x.GuidId).Column("GuidId")
.GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);
当我从数据库中检索对象,我对象的GuidId属性Guid.Empty,而不是实际的Guid(在属性该类是System.Guid类型的)。但是,对象中的所有其他属性都可以很好地填充。
数据库字段的数据类型(SQL Server 2005)是uniqueidentifier,并标记为RowGuid。
连接到数据库的应用程序是一个VB.NET网站项目(不是“Web应用程序”或“MVC Web应用程序” - 只是一个常规的“网站”项目)。我通过一个自定义的HttpModule打开NHibernate会话。这里是HTTP模块:
public class NHibernateModule : System.Web.IHttpModule
{
public static ISessionFactory SessionFactory;
public static ISession Session;
private static FluentConfiguration Configuration;
static NHibernateModule() {
if (Configuration == null) {
string connectionString = cfg.ConfigurationManager.ConnectionStrings["myDatabase"].ConnectionString;
Configuration = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
.ExposeConfiguration(c => c.Properties.Add("current_session_context_class", "web"))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadMap>().ExportTo("C:\\Mappings"));
}
SessionFactory = Configuration.BuildSessionFactory();
}
public void Init(HttpApplication context) {
context.BeginRequest += delegate {
Session = SessionFactory.OpenSession();
CurrentSessionContext.Bind(Session);
};
context.EndRequest += delegate {
CurrentSessionContext.Unbind(SessionFactory);
};
}
public void Dispose() {
Session.Dispose();
}
}
最奇怪的一部分,是从我的单元测试项目,作为我希望返回的GuidId财产。我甚至在网站正在打击的时候,将它安装在确切的数据库中。我能想到的两个项目之间是
- 单元测试项目,唯一的区别是在C#
- 一些与会话中的HttpModule和我单位之间管理方式测试
的单元测试的配置如下:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
我刚刚出来的想法。任何帮助将不胜感激。
感谢
感谢您的出口提示(我是NHibernate的新手)。 不幸的是,这两个项目之间的映射看起来完全相同。这里的GuidId柱: <列名称= “GuidId”/> <发电机组=“guid.comb”/> 仍处于亏损状态。 –
2009-10-02 14:10:58