Сопоставьте Id из класса Identity с помощью Fluent NHibernate

Я пытаюсь сопоставить идентификатор из класса Identity с помощью Fluent NHibernate.

Идентификационный класс:

public interface IValueObject<T> {
    bool SameValueAs(T other);
}

[Serializable]
public class Identity<TEntity> : IValueObject<Identity<TEntity>> {

    public long Id { get; protected set; }

    public Identity(long id) {
        this.Id = id;
    }

    protected Identity() { }

    public bool SameValueAs(Identity<TEntity> other) {
        return other != null && this.Id == other.Id;
    }
}

Модель:

public interface IEntity<T> {
    Identity<T> Identity { get; }
    bool SameIdentityAs(T other);
}

public class Employee: IEntity<Employee> {
    public virtual Identity<Employee> Identity { get; set; }
    public virtual string Name { get; set; }
}

Как я могу сопоставить этого сотрудника? Этот способ не работает, я получаю следующее исключение при построении SessionFactory: не удалось найти метод получения свойства 'Id' в классе 'Employee'

public class EmployeeMap : ClassMap<Employee> {

    public EmployeeMap() {
        Id(x => x.Identity.Id).GeneratedBy.Native();
        Map(x => x.Name);
    }
}

1 ответ

Решение

То, что вы пытаетесь сделать, не поддерживается.

Существует более длинное объяснение, но, особенно при использовании идентификаторов, сгенерированных DB, вы должны использовать развернутый, native int или long.

Тем не менее, вы можете отобразить идентификатор как личное поле в вашей сущности и показать его с помощью вашей обертки. Это все еще не будет работать на запросах LINQ, поэтому оно имеет ограниченную ценность.

Другие вопросы по тегам