我已經花了幾天時間來了解Fluent NHibernate自動映射工作模型。這是相當不錯的,但我一直在檢測我的模式中缺少的新細節。現在我想爲我的類添加額外的屬性,但沒有將它們映射到數據庫。一個典型的例子是當我需要具有內部邏輯的額外屬性時。
因此,我閱讀了示例並掃描了StackOverflow,發現這不是另一個要添加的約定,而是繼承DefaultAutomappingConfiguration並覆蓋ShouldMap方法的問題。
好,沒問題,一分鐘後,我有這樣的事情:
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;
}
}
}
我知道我的試聽課是一種愚蠢的,但它說明我的觀點。
這個想法是我想手動決定映射到數據庫的屬性。
readonly屬性工作正常,因爲ShouldMap方法將查找property.CanWrite。但是絕對設置的自定義屬性將不會被檢測到。這是爲什麼!?
在慣例方法中,我經常使用相同的方法,並且在那裏工作正常。爲什麼該屬性無法在此處檢測到已定義的屬性,當它顯然可以在約定中設置時。有沒有解決方法?
是的! 我假設你的意思是automapCONFIGURATION。我也有幾個約定,但它們都工作正常,不應該影響這個問題。 – 2012-04-20 08:48:53
謝謝!我其實錯過了你的編輯。但是今天我的一位同事發現了同樣的事情,所以我只是爲了通過這個簡單的調整來更新帖子。 MemberInfo而不是PropertyType造就了不同! – 2012-05-03 16:21:34