2012-02-16 11 views
0

に列名を無視して、私はシャープアーチのEntityクラスを継承する抽象基本クラスを持っている:流暢NHibernateはをオーバーライドIdプロパティ

/// <summary> 
    /// defines an entity that will ne indexed by a search crawler and offered up as full-text searchable 
    /// </summary> 
    public abstract class IndexedEntity : Entity 
    { 
    [DocumentId] 
    public override int Id 
    { 
     get { return base.Id; } 
     protected set { base.Id = value; } 
    } 
    } 

これは、従来のDBにあり、実際にId列が「HelpPageID」と呼ばれているので、私は単にEntityを継承するとき

mapping.Id(x => x.Id, "HelpPageID"); 

HelpPageを照会するために生成されたSQLが正常に動作します:として私はいくつかのマッピングのオーバーライドを持っています。しかし、IndexedEntityを継承すると、sqlに変換すると、列名のオーバーライドは無視され、その代わりにIdが使用され、失敗します。

編集 クラスに直接オーバーライドを置くようオーバーライドを有する一般的な問題は、同じ正味の効果を有している

+0

どの継承戦略を使用していますか? TPH? – Firo

+0

はいデフォルトのTPH –

答えて

0

マッピングオーバーライドのみmappingoverrideタイプをサブクラス正確なタイプではないタイプのために実行されるようです。サブクラスのオーバーライドを指定する必要があります。

+0

はスーパークラスを意味しますか?この場合、FNHは私が理解し経験した限り抽象的であるためにTPHシナリオでそれを無視します –