Идентификатор недвижимости не заполнен - PullRequest
1 голос
/ 02 октября 2009

У меня есть тождественное отображение так:

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

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

Тип данных поля базы данных (SQL Server 2005) имеет уникальный идентификатор и помечен как 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>());

Я свежая из идей. Любая помощь будет принята с благодарностью.

Спасибо

1 Ответ

0 голосов
/ 02 октября 2009

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

...