NHibernate SessionFactory и проблемы с отображением - PullRequest
0 голосов
/ 24 декабря 2011

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

Однако;когда я перемещаю вспомогательный класс, который возвращает 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();

    }
}

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

Web.UI ---> сущности (категория.cs) ---> сопоставления (categoryMap.cs) ---> FactoryGoo (NHibernateSessionFactory.cs

КОД для 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 ничего не работает, и я не понимаю, почему.

Спасибо, что прочитали это. Надеюсь, я написал достаточно для того, чтобы вы получили представление о настройке.

Ответы [ 2 ]

0 голосов
/ 26 декабря 2011

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

0 голосов
/ 25 декабря 2011

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

...