Запрос NHibernate не возвращает никаких результатов - PullRequest
1 голос
/ 01 сентября 2010

Я пытаюсь настроить Fluent и NHibernate правильно с ASP.NET MVC.Насколько я знаю, он настроен правильно, но когда я захожу на страницу, которая использует эту настройку, я не получаю никаких данных.

Используемая модель называется Brand, а таблица базы данных - * 1004.*.

Вот фрагмент из моего BrandController:

public ActionResult Index()
{
    IRepository<Brand> repo = new BrandRepository();
    var brands = repo.GetAll().ToList<Brand>();

     return View(brands);
}

Вот фрагмент из моего BrandRepository:

ICollection<Brand> IRepository<Brand>.GetAll()
{
    using (ISession session = NHibernateHelper.OpenSession())
    {
        var brands = session
            .CreateCriteria(typeof(Brand))
            .List<Brand>();

        return brands;
    }
}

Вот мой NHibernateHelper:

public class NHibernateHelper
{
    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {
                _sessionFactory = Fluently.Configure()
                    .Database(
                        MsSqlConfiguration.MsSql2008
                            .ConnectionString(c => c
                                .FromConnectionStringWithKey("ShoesFullAccess")
                            )
                    )
                    .BuildSessionFactory();
            }

            return _sessionFactory;
        }
    }

    public static ISession OpenSession()
    {
        return SessionFactory.OpenSession();
    }
}

Вот моя модель бренда:

public class Brand
{
    public int Id { get; private set; }
    public virtual string Name { get; set; }
    public virtual IList<Style> Styles { get; private set; }

    public Brand()
    {
        Styles = new List<Style>();
    }

    public virtual void AddStyle(Style style)
    {
        Styles.Add(style);
    }
}

И, наконец, вот моя карта бренда:

public class BrandMap : ClassMap<Brand>
{
    public BrandMap()
    {
        Id(x => x.Id);
        Map(x => x.Name);
        HasMany(x => x.Styles)
            .Inverse()
            .Cascade.All();
    }
}

Если бы кто-нибудь мог указать мне правильное направление, как ямогу сузить проблему, буду очень признателен!

Ответы [ 2 ]

5 голосов
/ 01 сентября 2010

Вы не добавляете сопоставления в конфигурацию.

Добавить до .BuildSessionFactory():

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<BrandMap>())
1 голос
/ 01 сентября 2010

Мне нужно было внести несколько изменений в мой код.Первым и основным было добавление сопоставлений в конфигурацию, как указал Диего.

Вы не добавляете сопоставления в конфигурацию.

Добавьте это перед .BuildSessionFactory ()

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<BrandMap>())

Следующее, что мне пришлось исправить, была моя Brand модель.Мне нужно было сделать поле Id virtual.

И, наконец, мне нужно было немного изменить мой BrandMap - мне нужно было точно указать, на какую таблицу он указывает, добавив этокод Table("Brands");

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...