Вопрос по c#, nhibernate, orm, .net, nhibernate-mapping – NHibernate DuplicateMappingException, когда два класса имеют одинаковое имя, но разные пространства имен

25

У меня есть класс в моем корне модели домена, который выглядит следующим образом:

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, чтобы я мог использовать две сущности с одинаковыми именами (но с разными пространствами имен)?

На случай, если это кому-нибудь поможет: такой же вопрос для Fluent.nHibernate:stackoverflow.com/questions/1290466 Malcolm

Ваш Ответ

3   ответа
16

У меня была такая же проблема. Я решил это так:

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())). Everything seems to be working fine with this configuration.

Не могли бы вы добавить объяснение имен таблиц, используемых с этой настройкой. Благодарю.
23

Я нашелответ на веб-сайте Hibernate:

If you have two persistent classes with the same unqualified name, you should set auto-import="false". An exception will result if you attempt to assign two classes to the same "imported" name.

Я использовал это как атрибут для<hibernate-mapping> тег и это сработало.

Кто-нибудь знает, как это сделать при использованииNHibernate.Mapping.Attributes на карту?
3

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

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

Где SeeMe.Data это сборка.

Черт возьми, как только я скопировал и вставил, что я виделauto-import="false" предложение ... и это сработало. cdmckay
хе-хе-хе-хе-хе, спящий камень, но я чувствую, что он не очень интуитивен. Я потратил много времени, стуча головой по какой-то глупой карте.
Еще говорит:NHibernate.DuplicateMappingException: duplicate import: Foo refers to both Domain.SubDomain.Foo, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null and Domain.Foo, Domain, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null (try using auto-import="false") cdmckay

Похожие вопросы