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", который требует диалект.
Но вы всегда должны устанавливать свойство диалекта, чтобы получить правильные значения по умолчанию для других свойств конфигурации (без необходимости указывать их вручную)...