Я пытаюсь заставить Fluent NHibernate отобразить для меня коллекцию. Мои определения классов следующие:
public abstract class Team
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
}
public class ClientTeam : Team
{
public virtual IEnumerable<Client> Clients { get; set; }
}
public class Client
{
public virtual Guid Id { get; set; }
public virtual string Name { get; set; }
public virtual string Identifiers { get; set; }
}
Мои сопоставления:
public class TeamMap : ClassMap<Team>
{
public TeamMap()
{
Table("Team");
Id(x => x.Id).GeneratedBy.Assigned();
Map(t => t.TeamName);
}
}
public class ClientTeamMap : SubclassMap<ClientTeam>
{
public ClientTeamMap()
{
HasMany(t => t.Clients);
}
}
public class ClientMap : ClassMap<Client>
{
public ClientMap()
{
Table("Client");
Id(c => c.Id);
Map(c => c.Name);
Map(c => c.Identifiers);
}
}
Я создал модульный тест, который создает экземпляр команды, а затем пытается сохранить его (в тестовой базе есть конфигурация зависимостей и т. Д.):
public class TeamMapTester : DataTestBase
{
[Test]
public void Should_persist_and_reload_team()
{
var team = new ClientTeamDetail
{
Id = Guid.NewGuid(),
TeamName = "Team Rocket",
Clients = new[]
{
new ClientDetail {ClientName = "Client1", ClientIdentifiers = "1,2,3"}
}
};
using (ISession session = GetSession())
{
session.SaveOrUpdate(team);
session.Flush();
}
AssertObjectWasPersisted(team);
}
}
Когда я запускаю тест, я получаю такую ошибку:
SetUp: FluentNHibernate.Cfg.FluentConfigurationException: при создании SessionFactory использовалась недопустимая или неполная конфигурация. Проверьте коллекцию PotentialReasons и InnerException для получения дополнительных сведений.
- База данных не была настроена с помощью метода базы данных.
----> NHibernate.MappingException: не удалось скомпилировать документ сопоставления: (XmlDocument)
----> NHibernate.PropertyNotFoundException: не удалось найти поле '_clients' в классе 'ClientTeam'
Я просмотрел документацию NHibernate и выполнил поиск в Google, но не могу найти ничего, что могло бы решить эту проблему. В документации для методов Referencing Fluent NHibernate явно используются свойства auto, поэтому я уверен, что проблема не в этом.
Почему NHibernate может подумать, что _clients
- это поле, которое он должен отображать в этом случае?
_clients
должен быть где-то определен. Свойство autoClients
не имеет_clients
в качестве реализации поля. Возникает вопрос: почему Fluent думает, что где-то есть поле_clients
? - person Pieter van Ginkel   schedule 29.10.2010