我正在使用一个小的POC应用程序,使用nHibernate。这是我第一次自己设置nHibernate,但我之前已经使用过它。出于某种原因,我的查询没有返回任何数据。我可以确认我的数据库中有一个Product
。
public class NHibernateHelper
{
private static String _connectionString =
@"Server=localhost\SQLEXPRESS;Database=TestProject;User ID=TestProjectMvc;Password=Pa$$word";
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
InitializeSessionFactory();
return _sessionFactory;
}
}
private static void InitializeSessionFactory()
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008.ConnectionString(_connectionString).ShowSql()
).Mappings(m => m.FluentMappings.AddFromAssemblyOf<Product>())
//.ExposeConfiguration(cfg => new SchemaExport(cfg).Create(true, true))
.BuildSessionFactory();
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
我的地图类:
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Id(x => x.Id);
Map(x => x.Name);
References(x => x.Category).Column("CategoryId");
}
}
我用来检索数据的方法:
public IEnumerable<Product> GetAllProducts()
{
using (var session = NHibernateHelper.OpenSession())
{
var list = session.QueryOver<Product>().List();
return list;
}
}
答案 0 :(得分:3)
从另一种类型的程序集中添加映射的非常有用的方法总是会让其他人绊倒。
对于其他任何想知道的问题......问题是:
.AddFromAssemblyOf<Product>()
Product
和ProductMap
位于不同的程序集中。因此,在Product
所在的程序集中找不到映射。
我看到许多人开始这次旅行了!
答案 1 :(得分:0)
另外 - 如果您使用SchemaExport为您生成数据库表 - / /请记住在第二次运行应用程序时将其关闭。否则它会为你重新制作空白表...