Id属性未填充

时间:2009-10-02 02:56:53

标签: 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。

连接到数据库的应用程序是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属性按照我的预期返回。我甚至操纵它去寻找确切的数据库中的确切行。我能想到的两个项目之间的唯一区别是

  1. 单元测试项目在C#
  2. 在HttpModule和我的单元测试之间管理会话的方式
  3. 单元测试的配置如下:

    Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
        .Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
    

    我的想法很新鲜。任何帮助将不胜感激。

    由于

1 个答案:

答案 0 :(得分:0)

在映射属性名称未设置时,我遇到了类似的问题。您可以尝试将流畅的映射保存到Xmls中并进行检查。