Fluent NHibernate Automapper Overrideを使用して、エンティティのユニークなカラムを指定しようとしています。 CodeTypeのテストクラスでは、Typeプロパティを一意にしたいと思います。目標は、現在保存されているCodeTypeと同じタイプフィールドを使用して作成された新しい "CodeType()"が現在のエンティティの上にオーバーレイされることです。Fluent NHibernate Automap Overrideで一意のカラムを定義する
I持って、次の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() { }
}
I以下CodeTypeMapクラスがあります。
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;
}
:オーバーライドは、以下を通じて、自動マップに適用される
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();
}
}
を
"type"が "existingTyp"の既存のレコードを更新するには、次のコードを使用しますe "である。
SecurableEntityRepository<CodeType> ctr = new SecurableEntityRepository<CodeType>();
CodeType ct = new CodeType();
ct.type = "existingType";
ct = ctr.SaveOrUpdate(ct);
どのようにタイプフィールドのNHibernateキーを一意にすることができますか?
これは可能ですか?
を言っているの削除または
protected CodeType() { }
行うことができます"? –また、私はこれらすべてのmappings.UseOverridesFromAssemblyOf(); 'が必要であるとは確信していません。すべてのオーバーライドが同じアセンブリ内に存在する場合は、それらのうちの1つだけが必要です。 –