Я создал проект ASP.net 4.0 и хотел использовать NHibernate для подключения к моей базе данных MySQL, расположенной на моем локальном хосте.Но так как это было для меня новым, я следовал руководству ( ссылка )
Для большинства решений требуется встроить файл XML, но я не знаю, как это сделать в проекте ASP.
И я выполнил все описанные там вещи, также загрузил проект, но теперь у меня появляется следующая ошибка:
No Persister for: MediaCatalog.Model.Movie
Ошибка возникает в этой строке:
ISession.SaveOrUpdate(movie);
Stacktrace:
в NHibernate.Impl.SessionFactoryImpl.GetEntityPersister (String entityName) в NHibernate.Impl.SessionImpl.GetEntityPersister (String entityName, Object obj) в NHibernate.Trans.Engine.entityName, объект Object, предполагается Nullable`1, сеанс ISessionImplementor) в NHibernate.Event.Default.AbstractSaveEventListener.GetEntityState (объект Entity, строка String entityName, запись EntityEntry, источник ISessionImplementor) в NHibernate.Event.Default.DeferdateEventUvent ()в NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate (событие SaveOrUpdateEvent) в NHibernate.Impl.SessionImpl.FireSaveOrUpdate (событие SaveOrUpdateEvent) в NHibernate.Impl.SessionImpl.SaveOrUpdate (объектный объект) в MediaCatalog.DAO.cinema: in\ Visual Studio 2010 \ WebSites \ MediaCatalog \ App_Code \ DAO \ MovieDAO.cs: строка 74 в MediaCatalog.BLL.MovieService.getMoviesFromDirectory (каталог строк) в каталоге c: \ Users \ Anthony \ Documents \ Visual Studio 2010 \ WebSites \ MediaCatalog \ App_Code\ BLL \ MovieService.cs: строка 35 в Default2.btnScanMovies_Click (отправитель объекта, EventArgs e) в каталоге c: \ Users \ Anthony \ Documents \ Visual Studio 2010 \ WebSites \ MediaCatalog \ Settings.aspx.cs: строка 25 в System.Web.UI.WebControls.Button.OnClick (EventArgs e) в System.Web.UI.WebControls.Button.RaisePostBackEvent (String eventArgument) в System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandlerReventArgument) в System.Web.UI.Page.RaisePostBackEvent (IPostBackEventHandler sourceControl, String eventArgumeнет) в System.Web.UI.Page.RaisePostBackEvent (NameValueCollection postData) в System.Web.UI.Page.ProcessRequestMain (логическое значение includeStagesBeforeAsyncPoint, логическое значение includeStagesAfterAsyncPoint)
может помочь в некотором коде:*
Web.config:
<configSections>
<section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" />
</configSections>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.MySQLDialect</property>
<property name="connection.driver_class">NHibernate.Driver.MySqlDataDriver</property>
<property name="connection.connection_string">Server=localhost;Database=mediacatalog;uid=admin;pwd=admin;</property>
<property name="current_session_context_class">web</property>
</session-factory>
</hibernate-configuration>
Movie.hbm.xml:
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
assembly="MediaCatalog"
namespace="MediaCatalog.Model">
<class name="MediaCatalog.Model.Movie, MediaCatalog" table="movie" lazy="true">
<id name="Id" Column="ID">
<generator class="guid"/>
</id>
<property name="Title" Column="Title"/>
<property name="Year" Column="Year"/>
<property name="Size" Column="Size"/>
</class>
</hibernate-mapping>
Movie.csкласс
namespace MediaCatalog.Model
{
public class Movie
{
int Id;
string Title;
string Year;
string Size;
public Movie(String _title, string _year, string _size)
{
Title = _title;
Year = _year;
Size = _size;
}
#region Getters & Setters
//GETTERS & SETTERS
public int getId()
{
return Id;
}
public void setId(int _id)
{
this.Id = _id;
}
public String getTitle()
{
return Title;
}
public void setTitle(String title)
{
this.Title = title;
}
public String getYear()
{
return Year;
}
public void setYear(String year)
{
this.Year = year;
}
public String getSize()
{
return Size;
}
public void setSize(string size)
{
this.Size = size;
}
# endregion
}
}
MovieDAO.cs класс
namespace MediaCatalog.DAO
{
public class MovieDAO : IMovieDAO
{
//private ISessionFactory _sessionFactory;
//private Configuration _configuration;
protected ISession _ISession;
private Dictionary<string, FetchMode> _fetchModeMap = new Dictionary<string, FetchMode>();
#region Properties
public System.Type Type
{
get { return typeof(Movie); }
}
public ISession ISession
{
get { return _ISession; }
}
#endregion
#region Constructors
public MovieDAO(ISession session)
{
this._ISession = session;
}
#endregion
#region Misc Methods
public void SetFetchMode(string associationPath, FetchMode mode)
{
if (!_fetchModeMap.ContainsKey(associationPath))
{
_fetchModeMap.Add(associationPath, mode);
}
}
public ICriteria CreateCriteria()
{
ICriteria criteria = ISession.CreateCriteria(typeof(Movie));
foreach (var pair in _fetchModeMap)
{
criteria = criteria.SetFetchMode(pair.Key, pair.Value);
}
return criteria;
}
#endregion
public void create(Movie movie)
{
//NHibernate.Cfg.Configuration config = new NHibernate.Cfg.Configuration();
//config.AddAssembly("MediaCatalog");
//_sessionFactory = config.BuildSessionFactory();
//using (ISession session = _sessionFactory.OpenSession())
//{
// using (session.BeginTransaction())
// {
// session.SaveOrUpdate(movie);
// session.Transaction.Commit();
// session.Close();
// }
//}
ISession.SaveOrUpdate(movie);
}
}
}
DataAccessFactory.cs класс
namespace MediaCatalog.Factories
{
public class DataAccessFactory
{
public static IMovieDAO LoadMovieDAO()
{
ISession session = ISessionManager.Instance.CreateISession();
return new MovieDAO(session);
}
}
}
Помощь будет принята с благодарностью:)