Я пытаюсь указать уникальный столбец для сущности, используя переопределение Fluent NHibernate Automapper. Для моего тестового класса CodeType я бы хотел сделать свойство Type уникальным. Цель состоит в том, чтобы «новый CodeType ()» создавался с тем же типом поля, что и текущий сохраненный CodeType, для наложения поверх текущего объекта.
У меня есть следующий класс CodeType:
public class CodeType : SecurableEntity
{
public virtual string Type { get; set; }
public virtual string Description { get; set; }
/// <summary>
/// This is a placeholder constructor for NHibernate.
/// A no-argument constructor must be available for NHibernate to create the object.
/// </summary>
public CodeType() { }
}
У меня есть следующий класс CodeTypeMap:
public class CodeTypeMap : IAutoMappingOverride<CodeType>
{
public void Override(AutoMapping<CodeType> mapping)
{
//Doesn't work. Need a way to specify a column as unique.
mapping.Map(m => m.Type).Unique();
}
}
Переопределение применяется к AutoMap с помощью следующего:
public AutoPersistenceModel Generate()
{
var mappings = AutoMap.AssemblyOf<User>(new AutomappingConfiguration());
mappings.IgnoreBase<Entity>();
mappings.IgnoreBase<SecurableEntity>();
mappings.IgnoreBase(typeof(EntityWithTypedId<>));
mappings.Conventions.Setup(GetConventions());
mappings.UseOverridesFromAssemblyOf<AutoPersistenceModelGenerator>();
mappings.UseOverridesFromAssemblyOf<UserMap>();
mappings.UseOverridesFromAssemblyOf<CodeMap>();
mappings.UseOverridesFromAssemblyOf<CodeTypeMap>();
return mappings;
}
Мне бы хотелось, чтобы следующий код обновлял любую существующую запись с «типом», равным «существующему типу».
SecurableEntityRepository<CodeType> ctr = new SecurableEntityRepository<CodeType>();
CodeType ct = new CodeType();
ct.type = "existingType";
ct = ctr.SaveOrUpdate(ct);
Как сделать ключ NHibernate из поля типа уникальным?
Возможно ли это?