ASP.net NHibernate не сохранен - PullRequest
       14

ASP.net NHibernate не сохранен

0 голосов
/ 16 января 2012

Я создал проект 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);
        }
    }
}

Помощь будет принята с благодарностью:)

1 Ответ

0 голосов
/ 16 января 2012

Вы должны указать NHibernate, какие классы или какая сборка определены в этих классах для отображения.Вы можете сделать это с помощью:

<mapping assembly="MediaCatalog" />

Поместите это внутри в ваш Web.Config и убедитесь, что ваши файлы * .hbm.xml настроены для сборки как встроенный ресурс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...