У меня есть отображение идентичности, например:
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 возвращается, как я и ожидал. Я даже сфальсифицировал его так, чтобы он обращался к точной строке в точной базе данных, когда веб-сайт попадал в цель. Единственные различия, которые я могу придумать между двумя проектами, это
- Модульный тестовый проект написан на C#.
- Что-то с управлением сеансом между HttpModule и моими модульными тестами
Конфигурация модульных тестов выглядит следующим образом:
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
У меня закончились идеи. Любая помощь будет принята с благодарностью.
Спасибо