Я преобразую предыдущий проект из обычного отображения NHibernate hbm.xml в Fluent NHibernate.В настоящее время я застрял на том, что должно быть одним из последних шагов, чтобы это заработало.Я добавил производный класс для DefaultAutomappingConfiguration, чтобы изменить мое соглашение об именовании идентификаторов.Строка «Id» добавляется к имени класса:
public override bool IsId(FluentNHibernate.Member member)
{
return member.Name == member.DeclaringType.Name + "Id";
}
Это должно сделать «Агентство» идентификатором в поле с именем «AgencyId».Вместо этого я получаю эту ошибку:
The entity 'ClassMap`1' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id).
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Я сделал точку останова для функции IsId, чтобы посмотреть, что происходит:
{Property: Cache}
{Name = "ClassMap`1" FullName = "FluentNHibernate.Mapping.ClassMap`1[[BackendDb.Model.Agency, BackendDb, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}
Что это?Объект не то, что я создал.Каждый другой объект проходит через эту функцию нормально, и те, которые я на самом деле хотел отобразить, возвращают правильное значение.
Моя фабрика сеансов выглядит примерно так:
var cfg = new MapConfig();
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2008
.ConnectionString(m => m.Server(@".\SqlExpress")
.Database("{some dbname}")
.TrustedConnection()))
.Mappings(m =>
m.AutoMappings
.Add(AutoMap.AssemblyOf<Agency>(cfg))
)
.BuildSessionFactory();
Досадно, кажетсячто это как-то привело к тому, что три таблицы, на которых я тестировал Fluent NHibernate в моей базе данных dev, были опорожнены .Какого черта?