C# mvc2 nhibernate проблема

У меня есть следующее отображение в моем приложении. Отображение создается с помощью специального инструмента. Другие сгенерированные отображения работают нормально, но это дает мне странную ошибку, которую я не понимаю.

Это отображение;

<?xml version="1.0" encoding="utf-8"?>
<!--Generated by NHibernate.Mapping.Attributes on 2010-10-29 08:39:48Z.-->
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Plugin.Twitter.Business.Entities.Tweet, Plugin.Twitter" table="PluginTwitter_Tweet">
    <id name="Id" column="Id">
      <generator class="guid" />
    </id>
    <property name="TweetMessage" />
    <property name="TweetDate" />
    <property name="TweetId" />
  </class>
</hibernate-mapping>

Это ошибка, которую я получаю в браузере, когда пытаюсь открыть веб-сайт, содержащий файл сопоставления;Ошибка отображения

Трассировка стека с ним, как показано ниже;

[InvalidOperationException: Could not find the dialect in the configuration]
   NHibernate.Dialect.Dialect.GetDialect(IDictionary 2 props) +204
   NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) +155

[MappingException: Could not compile the mapping document: Plugin.Twitter.Business.Entities.Hbm.Tweet.hbm.xml]
   NHibernate.Cfg.Configuration.AddValidatedDocument(NamedXmlDocument doc) +534
   NHibernate.Cfg.Configuration.AddInputStream(Stream xmlInputStream, String name) +378
   NHibernate.Cfg.Configuration.AddResource(String path, Assembly assembly) +419
   NHibernate.Cfg.Configuration.AddAssembly(Assembly assembly) +355
   NHibernate.Cfg.Configuration.AddAssembly(String assemblyName) +291
   CMS.ResourceAccess.DataAccessLogic.SessionManagement.SessionManager..ctor() in C:\Projects\Website\Website.ResourceAccess\DataAccessLogic\SessionManagement\SessionManager.cs:73
   Website.ResourceAccess.DataAccessLogic.SessionManagement.NestedSessionManager..cctor() in C:\Projects\Website\Website.ResourceAccess\DataAccessLogic\SessionManagement\SessionManager.cs:90

[TypeInitializationException: The type initializer for 'NestedSessionManager' threw an exception.]
   Website.ResourceAccess.DataAccessLogic.SessionManagement.SessionManager.get_Instance() in C:\Projects\Website\Website.ResourceAccess\DataAccessLogic\SessionManagement\SessionManager.cs:39
   CMS.ResourceAccess.DataAccessLogic.SessionManagement.SessionManager.get_SessionFactory() in C:\Projects\Website\Website.ResourceAccess\DataAccessLogic\SessionManagement\SessionManager.cs:23
   Website.Backend.MvcApplication.StartNHibernateSession() in C:\Projects\Website\Website.Web\Global.asax.cs:82
   Website.Backend.MvcApplication.Application_Start() in C:\Projects\Website\Website.Web\Global.asax.cs:47

[HttpException (0x80004005): The type initializer for 'NestedSessionManager' threw an exception.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +3988565
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +191
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +325
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +407
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +375

[HttpException (0x80004005): The type initializer for 'NestedSessionManager' threw an exception.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +11529072
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +141
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4784373

Я думаю, что важно обратить внимание на то, что полученное мной исключение является исключением отображения, как показано с этим правилом;

MappingException: Could not compile the mapping document: Plugin.Twitter.Business.Entities.Hbm.Tweet.hbm.xml]

Я не понимаю, как и почему, хотя, поэтому я надеюсь, что кто-то может сказать мне, что означает ошибка и как я могу исправить эту проблему. У меня есть отображение, помеченное как встроенный ресурс.

ОБНОВЛЕНИЕ: Мы используем следующий файл hibernate.cfg.xml в приложении.

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns='urn:nhibernate-configuration-2.2'>
  <session-factory>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
    <property name="connection.connection_string_name">NHibernate</property>
    <property name="current_session_context_class">managed_web</property>
    <property name='proxyfactory.factory_class'>NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    <!--Needed for NH Profiler-->
    <property name="generate_statistics">false</property>
  </session-factory>
</hibernate-configuration>

1 ответ

Решение

Это имеет мало общего с вашим отображением.

Он говорит: "Не удалось найти диалект в конфигурации", поэтому шансы велики, вы не указываете диалект в вашей конфигурации...

РЕДАКТИРОВАТЬ: отображения работают нормально без диалекта до тех пор, пока их поколение ПК является "родной" или "последовательность". Это отображение использует "guid", который требует диалект.

Но вы всегда должны устанавливать свойство диалекта, чтобы получить правильные значения по умолчанию для других свойств конфигурации (без необходимости указывать их вручную)...

Другие вопросы по тегам