Fluent NHibernateの自動演奏作業モデルを知るために数日を費やしてきました。それは素晴らしいですが、私はスキーマから欠けている新しい情報を検出し続けます。今私は、クラスに追加のプロパティを追加したいが、データベースにマッピングされていない。典型的なケースは、内部ロジックで追加のプロパティが必要な場合です。
例を読んでStackOverflowをスキャンし、これが追加される別の規則ではなく、DefaultAutomappingConfigurationを継承してShouldMapメソッドをオーバーライドすることがわかった。
ファイン、問題はないが、1分後、私はこのようなものだった:
Fluent NHibernate ShouldMapが私のカスタム属性を検出しない
public class CustomAutomappingConfiguration : DefaultAutomappingConfiguration
{
public override bool ShouldMap(Member member)
{
var explicitSkip = member.PropertyType.GetCustomAttributes(typeof(SkipMap), false).Length > 0;
if ((member.IsProperty && !member.CanWrite) || explicitSkip)
{
return false;
}
return base.ShouldMap(member);
}
}
/// <summary>
/// Don't map this property to database.
/// </summary>
public class SkipMap : Attribute
{
}
public class DemoClass
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual MyBitwiseEnum Status { get; set; }
public virtual bool IsValid
{
get
{
return (int)Status > 3;
}
}
[SkipMap]
public virtual bool IsBad
{
get
{
return MyBitwiseEnum.HasFlag(MyBitwiseEnum.Bad);
}
set
{
MyEnum = value ? MyBitwiseEnum | MyBitwiseEnum.Bad : MyBitwiseEnum^MyBitwiseEnum.Bad;
}
}
}
を私は私のデモクラスは一種の愚かであることを知っているが、それは私のポイントを説明します。
考えられるのは、データベースにマップするプロパティを手動で決定したいということです。
ShouldMapメソッドがproperty.CanWriteを検索するため、readonlyプロパティは正常に機能します。しかし、確実に設定されたカスタム属性は検出されません。何故ですか!?
私は同じ手法を頻繁に使いましたが、そこではうまくいきます。慣習的な設定で明白に可能な場合、プロパティが定義済みの属性を検出できないのはなぜですか?回避策はありますか?
はい! automapCONFIGURATIONを意味すると思います。私もいくつかの規則を持っていますが、それらはすべて問題なく動作します。 –
ありがとう!私は実際にあなたのこの編集を見逃しました。しかし、今日私の同僚の一人が同じことを発見したので、私はちょうどこの簡単な調整で投稿を更新するためにここに行った。 PropertyTypeの代わりにMemberInfoが違いを作った! –