У меня есть объекты домена в FluentNHibernate, у которых есть идентификаторы типа object
, которые всегда будут int
(рассуждая ниже).Прямо сейчас у меня есть серверная часть SQLite.Я хочу отобразить Id как автоинкремент.Пока у меня есть:
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("Users");
Id(x => x.Id).CustomType<int>().GeneratedBy.Native();
Map(x => x.Email);
}
}
public class User
{
public virtual object Id { get; set; }
public virtual string Email { get; set; }
}
Но когда загружаются карты, он выбрасывает FluentConfigurationException
с сообщением Identity type must be integral (int, long, uint, ulong)
для свойства User.Id
(трассировка стека говорит, что это происходит, когда я вызываю Native
. Опять же, я просто хочу получить целое число с автоинкрементом.
Обоснование для идентификатора объекта
У нас есть бизнес-требование для поддержки нескольких СУБД, а также MongoDB.Я уже хорошо осознаю, что это плохая идея, поэтому, пожалуйста, просто сконцентрируйтесь на этом вопросе. Mongo использует ObjectId (похожий на Guid несколько последовательный тип значения) для своего типа идентификатора по умолчанию. Идея состоит в том, чтобы скрыть фактический тип идентификатора (потому чтоэто зависит от уровня данных), но повторно использовать модели и иметь две разные реализации доступа к данным (Mongo и NHibernate).