У меня есть простой объект Карта Guid в колонку в Fluent NHibernate с ограничениями
public class SiteEntity
{
public virtual int Id {get; set;}
public virtual Guid PublicId {get; set;}
public virtual string Name {get; set;}
}
Я отображающий его с помощью Fluent NHibernate
пакета для достижения следующих ограничений:
Id
является идентификатором внутренней БД так он создается автоматически и определяется как PKPublicId
является публичным уникальным идентификатором. Она определяется как столбец с уникальным и не нулевым ограничением и генерируется при вставке так же, как ПКName
это описание, так что требуется (не нуль), но может быть что-нибудь
В результате я следующее отображение
public class SiteEntityMap : ClassMap<SiteEntity>
{
public SiteEntityMap()
{
Table("T_SITE");
Id(x => x.Id).Column("site_id").GeneratedBy.Identity();
Map(x => x.PublicId, "site_public_id").Generated.Insert().ReadOnly().Unique().Not.Nullable();
Map(x => x.Name, "site_name").Not.Nullable().CustomType("AnsiString").Unique().Length(512);
ReadOnly();
}
}
Теперь, если я создаю схемы с использованием NHibernate сопоставления ее создания, как мне нравится. Тем не менее, попытка сохранить SiteEntity
поле, которое Name
инициализированному результаты в GenericADOException
с сообщением:
«не смог вставить: [IWS.Configuration.DataModel.SiteEntity] [SQL: INSERT INTO T_CFG_SITE (site_name) VALUES (?), выберите SCOPE_IDENTITY()]»
Если удалить Not.Nullable()
из картографирования PublicId
собственности все работает, но поле в БД позволяет NULLs.
Просьба сообщить, как я могу сопоставить свойство Guid с столбцом с нулевым значением с автогенерируемым значением вставки.
Вы проверили, как сущность строится непосредственно перед вставкой? –
Кажется, что имя_сайта равно null, вы его проверили? Вы проверяли, есть ли какой-то триггер? Взгляните на эту таблицу: T_CFG_SITE –
Да, когда я вызываю 'session.Save (siteEntity)' объект имеет значение в свойстве Name. Я писал в вопросе, что, хотя сообщение и есть то, что ему нравится, актуальная проблема заключается в отображении свойства PublicId. Пожалуйста, перечитайте вопрос и сообщите мне, что неясно, поэтому я могу перефразировать. –