当我使用“FluentNHibernate”时,出现错误。 .xml中的类似文件正常工作,但我想使用“FluentNHibernate”更容易。你知道我犯错的地方吗?以及如何解决这个问题?使用FluentNHibernate进行错误映射NHibernate 3.3
复印异常
NHibernate.MappingException was unhandled by user code
Message=No persister for: TreningToWork.Models.Person
Source=NHibernate
StackTrace:
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.DefaultSaveEventListener.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)
at NHibernateTutorial.PersonRepository.Add(Person newPerson) in D:\praca\TreningToWork\TreningToWork\Repository\PersonRepository.cs:line 15
at TreningToWork.Controllers.ShowDataController.Index() in D:\praca\TreningToWork\TreningToWork\Controllers\ShowDataController.cs:line 21
at lambda_method(Closure , ControllerBase , Object[])
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
的异常(详情):
的异常(详情):
FluentNHibernate(使此相同为.xml)
using System.ComponentModel.DataAnnotations;
using FluentNHibernate.Automapping;
using FluentNHibernate.Automapping.Alterations;
namespace TreningToWork.Models
{
public class Person
{
[Key]
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Surname { get; set; }
}
public class PersonMappingAltertation : IAutoMappingOverride<Person>
{
public void Override(AutoMapping<Person> mapping)
{
mapping.Table("Person");
mapping.Id(x => x.Id, "Id").GeneratedBy.Identity();
mapping.Map(x=> x.Name, "Name").Column("Name").Not.Nullable();
mapping.Map(x => x.Surname, "Surname").Column("Surname").Not.Nullable();
}
}
}
人助手
using NHibernate;
using NHibernate.Cfg;
using TreningToWork.Models;
namespace TreningToWork.ModelsHelper
{
public class PersonHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
var configuration = new Configuration();
configuration.Configure();
configuration.AddAssembly(typeof(Person).Assembly);
_sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
人库
using NHibernate;
using TreningToWork.Models;
using TreningToWork.ModelsHelper;
namespace NHibernateTutorial
{
public class PersonRepository
{
public void Add(Person newPerson)
{
using (ISession session = PersonHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Save(newPerson);
transaction.Commit();
}
}
}
public Person GetPersonByName(string name)
{
using (ISession session = PersonHelper.OpenSession())
{
var result = session.QueryOver<Person>().Where(x => x.Name == name).SingleOrDefault();
return result ?? new Person();
}
}
public void Update(Person newPerson)
{
using (ISession session = PersonHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(newPerson);
transaction.Commit();
}
}
}
public void Delete(Person newPerson)
{
using (ISession session = PersonHelper.OpenSession())
{
using (ITransaction transaction = session.BeginTransaction())
{
session.Delete(newPerson);
transaction.Commit();
}
}
}
}
}
编辑后的文件错误
System.ArgumentNullException was unhandled by user code
Message=Value cannot be null.
Parameter name: Data Source
Source=System.Data
ParamName=Data Source
StackTrace:
at System.Data.SqlClient.SqlConnectionStringBuilder.set_DataSource(String value)
at FluentNHibernate.Cfg.Db.MsSqlConnectionStringBuilder.Create()
at FluentNHibernate.Cfg.Db.PersistenceConfiguration`2.CreateProperties()
at FluentNHibernate.Cfg.Db.PersistenceConfiguration`2.ConfigureProperties(Configuration nhibernateConfig)
at FluentNHibernate.Cfg.FluentConfiguration.Database(IPersistenceConfigurer config)
at TreningToWork.ModelsHelper.PersonHelper.get_SessionFactory() in D:\praca\TreningToWork\TreningToWork\ModelsHelper\PersonHelper.cs:line 20
at TreningToWork.ModelsHelper.PersonHelper.OpenSession() in D:\praca\TreningToWork\TreningToWork\ModelsHelper\PersonHelper.cs:line 40
at NHibernateTutorial.PersonRepository.Add(Person newPerson) in D:\praca\TreningToWork\TreningToWork\Repository\PersonRepository.cs:line 11
at TreningToWork.Controllers.ShowDataController.Index() in D:\praca\TreningToWork\TreningToWork\Controllers\ShowDataController.cs:line 21
at lambda_method(Closure , ControllerBase , Object[])
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
我厂
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using TreningToWork.Models;
namespace TreningToWork.ModelsHelper
{
public class PersonHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(c => c
.FromAppSetting("rafalConnectionString"))
//<%$ ConnectionStrings:rafalConnectionString %>
.ShowSql())
.Mappings(m => m
.FluentMappings.AddFromAssemblyOf<Person>())
.BuildSessionFactory();
// var configuration = new Configuration();
// configuration.Configure();
// configuration.AddAssembly(typeof(Person).Assembly);
// _sessionFactory = configuration.BuildSessionFactory();
}
return _sessionFactory;
}
}
public static ISession OpenSession()
{
return SessionFactory.OpenSession();
}
}
}
真的,我有问题,改变与配置。我将我的项目添加到这篇文章。告诉我我犯了什么错误以及如何解决这个问题。我没有找到这方面的好例子,可能这个项目将在未来完成时进入YouTube。对于其他用户。
如果您了解本文中的所有文件,则不必上传我的项目。
重要文件:
控制器 - >有控制器 模型,ModelsHelper,库和视图。如果你打开网站,我的软件必须在那里向数据库添加新的表格和数据。现在我遇到了问题。当我使用.xml文件时,一切正常,但我想使用“FluentNHibernate”,这是一个问题。
文件:My project download praca.zip
下一个错误:根据您的背景
System.ArgumentNullException was unhandled by user code
Message=Value cannot be null.
Parameter name: Data Source
Source=System.Data
ParamName=Data Source
StackTrace:
at System.Data.SqlClient.SqlConnectionStringBuilder.set_DataSource(String value)
at FluentNHibernate.Cfg.Db.MsSqlConnectionStringBuilder.Create()
at FluentNHibernate.Cfg.Db.PersistenceConfiguration`2.CreateProperties()
at FluentNHibernate.Cfg.Db.PersistenceConfiguration`2.ConfigureProperties(Configuration nhibernateConfig)
at FluentNHibernate.Cfg.FluentConfiguration.Database(IPersistenceConfigurer config)
at TreningToWork.ModelsHelper.PersonHelper.get_SessionFactory() in D:\praca\TreningToWork\TreningToWork\ModelsHelper\PersonHelper.cs:line 21
at TreningToWork.ModelsHelper.PersonHelper.OpenSession() in D:\praca\TreningToWork\TreningToWork\ModelsHelper\PersonHelper.cs:line 50
at NHibernateTutorial.PersonRepository.Add(Person newPerson) in D:\praca\TreningToWork\TreningToWork\Repository\PersonRepository.cs:line 11
at TreningToWork.Controllers.ShowDataController.Index() in D:\praca\TreningToWork\TreningToWork\Controllers\ShowDataController.cs:line 21
at lambda_method(Closure , ControllerBase , Object[])
at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation)
InnerException:
请显示会话工厂的创建。 – 2013-02-26 11:27:20
@Daniel Hilgarth现在我添加了所有文件 – 2013-02-26 11:31:58
您没有配置任何自动映射,但是您正在使用自动映射覆盖。您需要修复您的配置。开始[这里](https://github.com/jagregory/fluent-nhibernate/wiki/Getting-started)了解Fluent NHibernate的一般性介绍。并继续[这里](https://github.com/jagregory/fluent-nhibernate/wiki/Fluent-configuration)了解如何配置它。 – 2013-02-26 11:38:56