Идентификационное свойство не заполнено

У меня есть отображение идентичности, например:

Id(x => x.GuidId).Column("GuidId")
    .GeneratedBy.GuidComb().UnsavedValue(Guid.Empty);

Когда я извлекаю объект из базы данных, свойство GuidId моего объекта имеет значение Guid.Empty, а не фактический Guid (свойство в классе имеет тип System.Guid). Однако все остальные свойства в объекте заполняются просто отлично.

Тип данных поля базы данных (SQL Server 2005) — uniqueidentifier и помечен как RowGuid.

Приложение, которое подключается к базе данных, представляет собой проект веб-сайта VB.NET (не «веб-приложение» или «веб-приложение MVC» — просто обычный проект «веб-сайт»). Я открываю сеанс NHibernate через пользовательский HttpModule. Вот 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 и моими модульными тестами

Конфигурация модульных тестов выглядит следующим образом:

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

У меня закончились идеи. Любая помощь будет принята с благодарностью.

Спасибо


person M Falanga    schedule 02.10.2009    source источник


Ответы (1)


У меня была аналогичная проблема, когда в сопоставлении атрибута Name не было задано. Вы можете попытаться сохранить свои беглые сопоставления в Xmls и проверить их.

person Sly    schedule 02.10.2009
comment
Спасибо за совет по экспорту (я новичок в мире NHibernate). К сожалению, сопоставления между двумя проектами выглядят одинаково. Вот столбец GuidId: ‹id name=GuidId type=System.Guid, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089› ‹column name=GuidId /› ‹generator class=guid.comb /› ‹/ id› Все еще в недоумении. - person M Falanga; 02.10.2009