Nhibernate 未填充Id属性
我有一个这样的身份映射:Nhibernate 未填充Id属性,nhibernate,fluent-nhibernate,nhibernate-mapping,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
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应用程序”或“MVC 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();
}
}
公共类NHibernateModule:System.Web.IHttpModule
{
公共静态会话工厂会话工厂;
公开会议;
私有静态流配置;
静态NHibernateModule(){
if(配置==null){
string connectionString=cfg.ConfigurationManager.connectionString[“myDatabase”]。connectionString;
Configuration=fluent.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs=>cs.Is(ConnectionString)))
.ExposeConfiguration(c=>c.Properties.Add(“当前会话上下文类”、“web”))
.Mappings(x=>x.FluentMappings.AddFromAssemblyOf().ExportTo(“C:\\Mappings”);
}
SessionFactory=Configuration.BuildSessionFactory();
}
公共void Init(HttpApplication上下文){
context.BeginRequest+=委托{
Session=SessionFactory.OpenSession();
CurrentSessionContext.Bind(会话);
};
context.EndRequest+=委托{
CurrentSessionContext.Unbind(会话工厂);
};
}
公共空间处置(){
Session.Dispose();
}
}
最奇怪的是,从我的单元测试项目中,GuidId属性会像我预期的那样返回。我甚至对它进行了操纵,以便在web站点运行时查找精确数据库中的精确行。我能想到的两个项目之间的唯一区别是
Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs => cs.Is(connectionString)))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<LeadDetailMap>());
流利。配置()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(cs=>cs.Is(ConnectionString)))
.Mappings(x=>x.FluentMappings.AddFromAssemblyOf());
我没有什么想法。任何帮助都将不胜感激
谢谢当映射中的属性名称未设置时,我遇到了类似的问题。您可以尝试将fluent映射保存到Xmls中并检查它们。感谢导出提示(我是NHibernate世界的新手)。不幸的是,这两个项目之间的映射看起来完全相同。这是GuidId专栏:仍然不知所措。