NHibernate查询没有返回任何结果

时间:2010-09-01 04:04:08

标签: nhibernate asp.net-mvc-2 fluent-nhibernate

我正在尝试使用ASP.NET MVC正确配置Fluent和NHibernate。据我所知,它配置正确,但当我访问使用此设置的页面时,我没有收到任何数据结果。

我正在使用的模型称为Brand,数据库表为Brands

以下是我的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);
    }
}

最后,这是我的BrandMap:

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

如果有人能指出我如何缩小问题的正确方向,我将非常感激!

2 个答案:

答案 0 :(得分:5)

您没有将配置添加到配置中。

.BuildSessionFactory()

之前添加此内容
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<BrandMap>())

答案 1 :(得分:1)

我需要对我的代码进行一些修改。第一个也是主要的是像Diego指出的那样在配置中添加映​​射。

  

您没有将配置添加到配置中。

     

在.BuildSessionFactory()之前添加:

     

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

我必须解决的下一件事是我的Brand模型。我需要制作Id字段virtual

最后,我需要稍微更改一下BrandMap - 我必须通过添加此代码来Table("Brands");

指定它指向的确切表格