Могут ли соглашения об автоматическом сопоставлении работать с переопределениями сопоставления? - PullRequest
3 голосов
/ 20 июня 2011

У меня есть соглашение для моих идентификаторов, которое автоматически сопоставляет свойства с именем Id в качестве идентификатора.Поскольку требования уточняются, мне нужно настроить модель предметной области, поэтому, естественно, я подключился к сети и обнаружил, что мне нужно создать класс, который наследует от IAutoMappingOverride<T>.

Мое соглашение:

public class PrimaryKeyConvention : IIdConvention, IIdConventionAcceptance
{
    public void Apply(IIdentityInstance instance)
    {
        instance.Column("Id");
        instance.GeneratedBy.SeqHiLo(instance.Name, "10");
    }

    public void Accept(IAcceptanceCriteria<IIdentityInspector> criteria)
    {
        criteria.Expect(x => x.Generator, Is.Not.Set);
    }
}

Мое переопределение:

public class LocateMappingOverride : IAutoMappingOverride<Locate>
{
    public void Override(AutoMapping<Locate> mapping)
    {
        mapping.Map(x => x.SendTo).Not.Nullable();
    }
}

Соглашение работает должным образом, если я удаляю свое переопределение.

Исключение, которое я получаю: The entity 'LocateMappingOverride' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id)..

Возможно ли этоиспользовать соглашения в сочетании с переопределениями сопоставления?

1 Ответ

2 голосов
/ 22 октября 2011

Ответ - да, автоматическое сопоставление может работать с переопределениями.

Посмотрите, что говорит ошибка.Проблема не в Locate сущности, а в LocateMappingOverride сущности, и этот класс, конечно, не должен рассматриваться как сущность.Вы должны настроить IAutomappingConfiguration так, чтобы правило FluentNHibernate, относящееся к объекту, также включало LocateMappingOverride.И действительно, у него нет сопоставленного идентификатора.

Вы должны либо:

  • изменить IAutomappingConfiguration, чтобы исключить классы, которые реализуют IAutoMappingOverride<>
  • переместите переопределение за пределы области, в которой ищутся объекты
  • , или введите общий интерфейс маркера, который должны быть реализованы всеми объектами, то есть IEntity и измените правила IAutomappingConfiguration соответственно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...