Я использую FluentNHibernate.Я не использую автоматическое отображение.У меня есть базовый класс, который подкласс.Когда я выполняю запрос к базовому классу, он выполняет дополнительный запрос к подклассу.Вот (надуманный) пример того, что я делаю:
public class Foo
{
int Id;
string SomeValue;
}
Я создаю другой класс, который представляет запись аудита первой, и я наследую ее:
public class FooAudit : Foo
{
DateTime DateModified;
}
Я создаюотдельные сопоставления для каждой из них, которые идут в свои таблицы:
public class FooMap : ClassMap<Foo>
{
public FooAuditMap()
{
Table("Foo");
Id(x => x.Id).Column("FOO_ID");
Map(x => x.SomeValue).Column("SOME_VALUE");
}
}
public class FooAuditMap : ClassMap<FooAuditMap>
{
public FooAuditMap()
{
Table("FooAudit");
CompositeId()
.KeyProperty(x => x.DateModified, c => c.ColumnName("AUDIT_DATE"));
.KeyProperty(x => x.Id, c => c.ColumnName("FOO_ID"));
Map(x => x.SomeValue).Column("SOME_VALUE");
}
}
Я выполняю запрос к Foo:
public virtual IEnumerable<Foo> List()
{
using (var session = SessionFactory.OpenSession())
{
return session.CreateCriteria<Foo>().List<Foo>();
}
}
, который затем дважды обращается к БД, один раз для выполнения этого запроса к Fooи снова в FooAudit.
Почему он делает два запроса?Я сгенерировал файлы HBM, и эти классы абсолютно ничего не связывают.
РЕДАКТИРОВАТЬ: Для полноты вот как выглядит конфигурация начальной загрузки.
public static ISessionFactory CreateSessionFactory()
{
return Fluently
.Configure()
.Database
(
FluentNHibernate.Cfg
.Db.MsSqlConfiguration.MsSql2005
.ConnectionString(GetConnectionString())
)
.Mappings(m => m
.FluentMappings.AddFromAssemblyOf<Foo>()
.Conventions.Add(typeof(EnumConvention)))
.BuildSessionFactory();
}