簡體   English   中英

NHibernate DuplicateMappingException 當兩個類具有相同的名稱但不同的命名空間時

[英]NHibernate DuplicateMappingException when two classes have the same name but different namespaces

我的域模型根中有一個類,如下所示:

namespace Domain
{
  public class Foo { ... }
}

我在不同的命名空間中還有另一個同名的類:

namespace Domain.SubDomain
{
  public class Foo { ... }
}

對於我的映射,我有一個Mapping目錄,其中有一個名為SubDomain的子目錄,其中包含Domain.SubDomain命名空間中的域類的映射。 它們都在同一個程序集中。

但是,當我嘗試使用 NHibernate 加載它們時,我不斷收到DuplicateMappingException ......即使兩個 Foos 都有不同的命名空間。 我用來加載我的 NHibernate 配置的代碼是這樣的:

var cfg = new Configuration()
  .Configure()                
  .AddAssembly("Domain");   

我如何告訴 NHibernate 讓我使用兩個具有相同名稱(但名稱空間不同)的實體?

我在 Hibernate 網站上找到了答案

如果您有兩個具有相同非限定名稱的持久類,則應設置auto-import="false" 如果您嘗試將兩個類分配給相同的“導入”名稱,則會導致異常。

我用它作為<hibernate-mapping>標簽的一個屬性並且它起作用了。

我曾經也有過一樣的問題。 我是這樣解決的:

Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
                .ConnectionString(...)
                .AdoNetBatchSize(500))
            .Mappings(m => m.FluentMappings
                .Conventions.Setup(x => x.Add(AutoImport.Never()))
                .AddFromAssembly(...)
                .AddFromAssembly(...)
                .AddFromAssembly(...)
                .AddFromAssembly(...))
            ;

導入的部分是: .Conventions.Setup(x => x.Add(AutoImport.Never())) 使用此配置似乎一切正常。

您可以在映射文檔中指定類的完全限定名稱,如下所示:

<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...

其中 SeeMe.Data 是程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM