我正在尝试使用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();
}
}
如果有人能指出我如何缩小问题的正确方向,我将非常感激!
答案 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");