NHibernate DuplicateMappingException, когда два класса имеют одинаковое имя, но разные пространства имен
У меня есть класс в корне моей модели домена, который выглядит так:
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, чтобы я мог использовать два объекта с тем же именем (но разными пространствами имен)?
Ответы
Ответ 1
Я нашел ответ на веб-сайте Hibernate:
Если у вас есть два постоянных класса с тем же самым неквалифицированным именем, вы должен установить auto-import = "false". исключение будет возникать, если вы попытаетесь присвоить два класса тому же "импортированное" имя.
Я использовал это как атрибут для тега <hibernate-mapping>
, и он сработал.
Ответ 2
У меня была та же проблема. Я решил это так:
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()))
.
Кажется, что все хорошо работает с этой конфигурацией.
Ответ 3
Вы можете указать полное имя классов в документе сопоставления следующим образом:
<class name="SeeMe.Data.People.Relationship, SeeMe.Data" ... > ...
Где SeeMe.Data - это сборка.