0

После многих часов чтения устаревшей документации в Интернете для управления сеансом и конфигурации NHibernate/Fluent Nhibernate я фактически получил конфигурацию, которая работает без использования XML, файлы моего poco и map работают в WebProject и Я почти взволновался.NHibernate SessionFactory и проблемы с отображением

Однако; когда я перемещаю вспомогательный класс, который возвращает ISessionFactory на фактический уровень, в котором он должен быть, ничего не работает, никаких ошибок, я получаю 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(); 

    } 
} 

Я разорвал всю мою Виндзорский контейнер конфигурацию, чтобы упростить устранение неполадок, так что я имею базовую настройку следующим образом.

Web.UI ---> лица (category.cs) ---> отображения (categoryMap.cs) ---> 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

Убедитесь, что класс категории, на который ссылается метод BuildSessionFactory, ссылается на класс категории в ожидаемом пространстве имен/проекте. Другими словами, в разных проектах может быть несколько классов категорий.

0

Я не уверен, конечно, но я думаю, вы хотели связать родительскую категорию с вашей категорией и быть того же типа? Если да, чем использовать объект с полномасштабной категорией как свойство, а не categoryId, а не использовать Map(), но используйте бесплатные ссылки().

Смежные вопросы