0

之後,在因特網上閱讀過時的文檔來管理NHibernate/Fluent Nhibernate的會話和配置,我實際上得到了一個不使用XML的配置,我的poco和map文件在WebProject中工作,我幾乎感到興奮。NHibernate SessionFactory和映射問題

但是;當我移動返回ISessionFactory的幫助器類到它應該在的實際層時,沒有任何工作,沒有錯誤,我從Session Factory獲得一個ISession,只是沒有Entites。請注意我正在使用這個類的屬性來讓我的工廠回來,我自我解釋我知道。 某種錯誤在這裏會很棒。 CODE:

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(); 

    } 
} 

我已經撕去了我所有的溫莎容器的配置,使故障排除更容易,所以我有基本的設置如下。

Web.UI --->實體(category.cs) --->映射(categoryMap.cs) ---> FactoryGoo(NHibernateSessionFactory.cs

CODE對於POCO /實體

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

確保BuildSessionFactory方法中引用的類別類別引用預期名稱空間/項目中的類別類別。換句話說,不同項目中可能有多個類別類別。

0

我不確定當然,但我認爲你的意思是將父類別與你的類別聯繫起來並且屬於同一類型?如果是,則使用完整的類別對象作爲屬性而不是categoryId,而不是使用Map(),但使用流暢的References()。