后,在互联网上阅读到过期的文档管理会话和NHibernate /功能NHibernate的配置多小时,我居然得到了不使用XML工作的配置,我的POCO的文件和映射文件在WebProject工作,我差点激动。
然而;当我移动helper类将ISessionFactory返回到它应该进入的实际层时,没有任何效果,没有错误,我从Session Factory获得了一个ISession而没有Entites。请注意我正在使用本课程中的属性来恢复我的工厂,自我解释我知道。 在这里继续发生某种错误。 代码:
public class NhibernateSessionFactoryHelper
{
private static ISessionFactory _sessionFactory;
private static string _connectionString =
ConfigurationManager.ConnectionStrings["SqlConnectionString"].ToString();
public static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISessionFactory BuildSessionFactory()
{
var cfg =
Fluently.Configure().ProxyFactoryFactory(typeof(ProxyFactoryFactory).AssemblyQualifiedName).Mappings(
m => m.FluentMappings.AddFromAssemblyOf<Category>()).Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString)).Cache(c => c.UseQueryCache());
return cfg.BuildSessionFactory();
}
}
我已经删除了所有我的Windsor容器配置,以便更轻松地进行故障排除,因此我的基本设置如下。
Web.UI ---&GT;实体(category.cs) ---&GT;映射(categoryMap.cs) ---&GT; FactoryGoo(NHibernateSessionFactory.cs
POCO / Entity的代码
public class Category {
public Category() { }
public virtual int CategoryID { get; set; }
public virtual string CategoryName { get; set; }
public virtual string CategoryDescription { get; set; }
public virtual System.Nullable<int> ParentCategoryID { get; set; }
public virtual System.Nullable<int> DisplayOrder { get; set; }
public virtual int Active { get; set; }
public virtual string DateCreated { get; set; }
public virtual string LastUpdated { get; set; }
}
映射代码
public class CategoryMap : ClassMap<Category> {
public CategoryMap() {
Table("Categories");
LazyLoad();
Id(x => x.CategoryID).GeneratedBy.Identity().Column("CategoryID");
Map(x => x.CategoryName).Column("CategoryName").Not.Nullable().Length(50);
Map(x => x.CategoryDescription).Column("CategoryDescription").Not.Nullable();
Map(x => x.ParentCategoryID).Column("ParentCategoryID");
Map(x => x.DisplayOrder).Column("DisplayOrder");
Map(x => x.Active).Column("Active").Not.Nullable();
Map(x => x.DateCreated).Column("DateCreated").Not.Nullable();
Map(x => x.LastUpdated).Column("LastUpdated").Not.Nullable();
}
}
正如我之前所说,当所有类都存在于同一个程序集中时,我会得到我的实体和我的数据。当我将SessionFactory移动到我的SessionManagement项目或映射到Infrastructure.Data.Mappings项目和实体到Domain.Entities项目时,没有任何工作,我没有错误的原因。
感谢您阅读本文,我希望我已经发布了足够的内容供您了解设置。
答案 0 :(得分:0)
确保BuildSessionFactory方法中引用的类别类引用了期望的命名空间/项目中的类别类。换句话说,不同项目中可能有多个类别类别。
答案 1 :(得分:0)
我当然不确定,但我认为您的意思是将父类别与您的类别相关联,并且属于同一类型?如果是,则使用完整的类别对象作为属性而不是categoryId,并且不使用Map()但使用流畅的References()。