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