模型错误没有持久性
No persister for Model error
首先,我用谷歌搜索并在此处阅读了类似的问题,但没有一个对我有帮助。
但也许我错过了一些真正重要的东西?
在这里得到了这个教程,并试图坚持下去(但也许我错过了一些真正重要的东西?)
http://www.infoworld.com/article/3030212/application-development/how-to-work-with-fluent-nhibernate-in-c.html
所以,这是我的 NHibernate Helper:
public static class NHibernateHelper
{
public static ISession OpenSession()
{
string connectionString = ConfigurationManager.ConnectionStrings["WebAuthTest"].ConnectionString;
ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Product>())
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
.BuildSessionFactory();
return sessionFactory.OpenSession();
}
}
Web.config 连接字符串:
<connectionStrings>
<add name="WebAuthTest" connectionString="data source=localhost;initial catalog=TestAuthDatabase;persist security info=True;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.4000" newVersion="4.1.0.4000" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这里失败了,就在我调用控制器之后:
public class TestController: ApiController
{
private readonly ITestService _testService;
public TestController()
{
}
public TestController(ITestService tst)
{
_testService = tst;
using (ISession session = NHibernateHelper.OpenSession())
{
var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };
session.SaveOrUpdate(product);
}
}
public string Get()
{
var message = string.Format("The current data on the server is: {0}", _testService.TestFunction());
return message;
}
}
堆栈跟踪:
at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String
entityName) at
NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName,
Object obj) at
NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object
entity, String entityName, Object anything, IEventSource source,
Boolean requiresImmediateIdAccess) at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent
event) at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent
event) at
NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent
event) at
NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent
event) at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent
event) at NHibernate.Impl.SessionImpl.Save(Object obj)
映射和模型与文章中的一样,但仍然:
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
Table("Product");
}
}
UPD:
已解决。 @stuartd 对本教程的看法是正确的,其中有失误
又是我太笨了。
来上班了,又用谷歌搜索了。
这里的答案对我有帮助:no persister for: Fluent nHibernate Exception
所以,就我而言
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())
解决了问题。
谢谢大家!
首先,我用谷歌搜索并在此处阅读了类似的问题,但没有一个对我有帮助。 但也许我错过了一些真正重要的东西?
在这里得到了这个教程,并试图坚持下去(但也许我错过了一些真正重要的东西?) http://www.infoworld.com/article/3030212/application-development/how-to-work-with-fluent-nhibernate-in-c.html
所以,这是我的 NHibernate Helper:
public static class NHibernateHelper
{
public static ISession OpenSession()
{
string connectionString = ConfigurationManager.ConnectionStrings["WebAuthTest"].ConnectionString;
ISessionFactory sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString).ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Product>())
.ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(false, true))
.BuildSessionFactory();
return sessionFactory.OpenSession();
}
}
Web.config 连接字符串:
<connectionStrings>
<add name="WebAuthTest" connectionString="data source=localhost;initial catalog=TestAuthDatabase;persist security info=True;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
app.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="NHibernate" publicKeyToken="aa95f207798dfdb4" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.1.0.4000" newVersion="4.1.0.4000" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这里失败了,就在我调用控制器之后:
public class TestController: ApiController
{
private readonly ITestService _testService;
public TestController()
{
}
public TestController(ITestService tst)
{
_testService = tst;
using (ISession session = NHibernateHelper.OpenSession())
{
var product = new Product { Name = "Lenovo Laptop", Description = "Sample product" };
session.SaveOrUpdate(product);
}
}
public string Get()
{
var message = string.Format("The current data on the server is: {0}", _testService.TestFunction());
return message;
}
}
堆栈跟踪:
at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName) at NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName, Object obj) at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event) at NHibernate.Impl.SessionImpl.Save(Object obj)
映射和模型与文章中的一样,但仍然:
public class Product
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Description { get; set; }
}
public class ProductMap : ClassMap<Product>
{
public ProductMap()
{
Id(x => x.Id);
Map(x => x.Name);
Map(x => x.Description);
Table("Product");
}
}
UPD:
已解决。 @stuartd 对本教程的看法是正确的,其中有失误
又是我太笨了。 来上班了,又用谷歌搜索了。
这里的答案对我有帮助:no persister for: Fluent nHibernate Exception
所以,就我而言
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<ProductMap>())
解决了问题。
谢谢大家!