我有这样的身份映射:
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站点项目(不是“Web应用程序”或“MVC Web应用程序” - 只是常规的“Web站点”项目)。我通过自定义HttpModule打开NHibernate会话。这是HttpModule:
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属性按照我的预期返回。我甚至操纵它去寻找确切的数据库中的确切行。我能想到的两个项目之间的唯一区别是
单元测试的配置如下:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
我的想法很新鲜。任何帮助将不胜感激。
由于
答案 0 :(得分:0)
在映射属性名称未设置时,我遇到了类似的问题。您可以尝试将流畅的映射保存到Xmls中并进行检查。