2016-02-29 35 views
0

我試過1000個不同的選項排列。 爲什麼不能編譯我的Cat映射?MappingExperience NHibernate 4.net 4.5 SPA

拋出異常: 'NHibernate.MappingException' 在NHibernate.dll 其他信息:無法編譯映射文檔:從Web.Config中 (字符串)

 Configuration cfg = new Configuration(); 
     cfg.Configure(); 
     cfg.AddXmlString(
      @"<?xml version=""1.0"" encoding=""utf - 8"" ?>" 
      + @"<hibernate-mapping xmlns=""urn:nhibernate-mapping-2.2"" assembly=""QuickStart"" namespace=""QuickStart.Cat"">" 
      + @"<class name=""Cat"" table=""Cat"">" 
      + @" <id name=""Id"" ><column name=""CatId"" /><generator class=""uuid.hex"" /></id>" 
      //+ @" <id name=""Id"" ><column name=""CatId"" sql-type=""char(32)"" not-null=""true"" /><generator class=""uuid.hex"" /></id>" 
      //+ @" <property name=""Name"" ><column name=""Name"" length=""16"" not-null=""true"" /></property>" 
      //+ @" <property name=""Sex"" />" 
      //+ @" <property name=""Weight"" />" 
      + @"</class>" 
      + @"</hibernate-mapping>" 
     ); 

--- NHibernate.Connection.DriverConnectionProvider NHibernate.Driver.SqlClientDriver NHibernate.Dialect.MsSql2012Dialect Server = localhost;初始目錄= PlaygroundDB;集成S ecurity =真

+1

我認爲答案已經在下面給出,但只是一個額外的說明:總是檢查異常消息,包括遞歸的InnerException屬性 - 這通常是很有幫助的。 –

+0

「無法編譯」與nhibernate所呈現的內部異常非常接近。 – Steve

回答

1

encoding=""utf - 8"" ?>應該encoding=""utf-8""?>

但我絕不添加XML映射一個programmaticaly之一。甚至更少的原始字符串(這很容易出錯)。相反,我在項目中添加ClassName.hbm.xml文件,將其Build action屬性設置爲Embedded resource,並在構建配置之前調用.AddAssembly(MyProjectAssembly)

如果您的映射嵌入在同一組件限定你的會話工廠,代碼簡單:

public static class NHibernateSessionFactory 
{ 
    private static readonly ISessionFactory _sessionFactory; 

    static NHibernateSessionFactory() 
    { 
     var configuration = new Configuration(); 
     configuration.Configure(); 
     configuration.AddAssembly(typeof(NHibernateSessionFactory).Assembly); 
     _sessionFactory = configuration.BuildSessionFactory(); 
    } 

    public static ISessionFactory Instance { get { return _sessionFactory; } } 
} 

最低配置文件(hibernate.cfg.xml中)我使用:

<?xml version="1.0" encoding="utf-8"?> 
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory name="ProjectName"> 
    <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
    <property name="connection.connection_string_name">ProjectConnectionStringName</property> 
    <property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property> 
    <property name="adonet.batch_size">100</property> 
    <property name="prepare_sql">true</property> 
    </session-factory> 
</hibernate-configuration> 

ProjectConnectionStringName指在.Net標準配置connectionStrings節點中定義的連接字符串。

+0

根據nHibernate的文檔和構造,可能有12種添加映射到配置的不同方法。但如果一個人工作,他們應該都工作。根據我原來的帖子,我發現嵌入資源有一些幫助。但嵌入式資源不是一個完整的解決方案。正如我所說我已經嘗試了一千件東西〜我字面上的意思是。我已經從字面上嘗試了nHibernate空間中的所有內容。 – Steve

+0

我的意思是建議一個更簡單的設置來調試你的麻煩。並指出「utf-8」無效的事實,因此可能會導致您看到的這種通用錯誤,從而隱藏了映射可能包含的任何其他錯誤。如果xml無效,則無法解釋。 –

+0

非常感謝您的建議,並在UTF規範中尋找額外的空間。修復UTF規範確實改變了一切。 – Steve