[英]Overriding the base behavior of a C# property accessor method with Fluent NHibernate
我有一堆C#類,它們從一個抽象基類繼承了許多屬性。 所有類型都使用Fluent NHibernate映射到數據庫模型,並且所有屬性定義都使用自動getter和setter(標准的“get; set;”語法)。 我最近發現需要為我的一個派生類型的基本類型屬性提供一個訪問器方法的特定實現。 所以我為基類屬性創建了一個顯式的后備字段:
public abstract class BaseEntity : IBaseEntity
{
protected bool active_field;
...
public virtual bool active { get { return active_field; } set { active_field = value; } }
...
}
然后在派生類型定義中為“active”屬性定義特定的getter邏輯:
public override bool active
{
get { return active_field && (this.Expiration == null || this.Expiration < DateTime.Now); }
set { active_field = value; }
}
但是,當我啟動項目時,NHibernate會拋出異常:
FluentNHibernate.dll中出現“System.InvalidOperationException”類型的異常,但未在用戶代碼中處理。 附加信息:嘗試在已添加時添加屬性“活動”。
我猜這與NHibernate有關,需要為屬性定義提供它自己的覆蓋(因此為什么它要求屬性首先被聲明為虛擬),但我並不是所有NHibernate的精明。 既然如此,我很樂意提供任何其他細節,但不知道還有什么相關的。 是否有一個明顯的原因導致無法正常工作? 如果是這樣,有一個簡單的解決方法嗎?
我不確定你的問題的根源,但是,試着回答你的問題:
映射私有財產或字段:
public class EntityMap : ClassMap<Entity>
{
Id(e => e.Id).GeneratedBy.Identity();
Map(Reveal.Member<Entity>("PrivatePropertyName"));
}
現在建議嘗試解決您的問題:您可以使用new關鍵字隱藏擴展類的屬性(屬性仍然需要是虛擬的 )。
public virtual new bool active
{
get { return active_field && (this.Expiration == null || this.Expiration < DateTime.Now); }
set { active_field = value; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.