Nhibernate 未填充Id属性

Nhibernate 未填充Id属性,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有一个这样的身份映射: Id(x => x.GuidId).Column("GuidId") .GeneratedBy.GuidComb().UnsavedValue(Guid.Empty); 从数据库检索对象时,对象的GuidId属性为Guid.Empty,而不是实际的Guid(类中的属性类型为System.Guid)。但是,对象中的所有其他属性都可以很好地填充 数据库字段的数据类型(SQL Server 2005)为uniqueidentifier,并标记为RowGuid

我有一个这样的身份映射:

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会话。以下是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();
    }
}
公共类NHibernateModule:System.Web.IHttpModule
{
公共静态会话工厂会话工厂;
公开会议;
私有静态流配置;
静态NHibernateModule(){
if(配置==null){
string connectionString=cfg.ConfigurationManager.connectionString[“myDatabase”]。connectionString;
Configuration=fluent.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs=>cs.Is(ConnectionString)))
.ExposeConfiguration(c=>c.Properties.Add(“当前会话上下文类”、“web”))
.Mappings(x=>x.FluentMappings.AddFromAssemblyOf().ExportTo(“C:\\Mappings”);
}
SessionFactory=Configuration.BuildSessionFactory();
}
公共void Init(HttpApplication上下文){
context.BeginRequest+=委托{
Session=SessionFactory.OpenSession();
CurrentSessionContext.Bind(会话);
};
context.EndRequest+=委托{
CurrentSessionContext.Unbind(会话工厂);
};
}
公共空间处置(){
Session.Dispose();
}
}
最奇怪的是,从我的单元测试项目中,GuidId属性会像我预期的那样返回。我甚至对它进行了操纵,以便在web站点运行时查找精确数据库中的精确行。我能想到的两个项目之间的唯一区别是

  • 单元测试项目是用C语言编写的#
  • 在HttpModule和我的单元测试之间管理会话的方式
  • 单元测试的配置如下所示:

    Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
        .Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
    
    流利。配置()
    .Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs=>cs.Is(ConnectionString)))
    .Mappings(x=>x.FluentMappings.AddFromAssemblyOf());
    
    我没有什么想法。任何帮助都将不胜感激


    谢谢

    当映射中的属性名称未设置时,我遇到了类似的问题。您可以尝试将fluent映射保存到Xmls中并检查它们。

    感谢导出提示(我是NHibernate世界的新手)。不幸的是,这两个项目之间的映射看起来完全相同。这是GuidId专栏:仍然不知所措。