2012-02-21 81 views
2

我想從我的消費者的實體類的隱藏的主鍵Id屬性:流利的NHibernate自動映射的私人/保護財產,作爲標識

public class A 
{ 
    protected virtual int Id { get; set; } 
    public virtual string Name { get; set; } 
    ... etc ... 
} 

使Id屬性的保護不符合標準的自動映射工作,它無法找到它。

我試圖覆蓋DefaultAutomappingConfiguration.IsId(...)但這隻會被公衆成員回電。

我如何能得到這個,而無需使用特定ClassMap<A> S代表每種類型的工作,如記錄在這裏: http://wiki.fluentnhibernate.org/Fluent_mapping_private_properties

編輯: 我想改變自動映射公約查找名稱爲「任何財產身份證「,而不僅僅是公共財產。我希望使用ClassMap<T>每個類的基礎配置,如下所示:

public ClassAMap: ClassMap<A> 
{ 
    public ClassAMap() 
    { 
     Id(Reveal.Member<ClassAMap>("Id")); 
    } 
} 
public ClassBMap: ClassMap<B> 
{ 
    public ClassBMap() 
    { 
     Id(Reveal.Member<ClassBMap>("Id")); 
    } 
} 
... etc ... 

回答

0

如果您正在使用自動映射實現IIdConvention接口

public class PrimaryKeyConvention : IIdConvention 
{ 
    public void Apply(IIdentityInstance instance) 
    { 
    instance.Column(instance.EntityType.Name + "Id"); 
    } 
} 

或者覆蓋默認的自動映射如下:

public ProductMap : ClassMap<Product> 
{ 
    public ProductMap() 
    { 
    Id(Reveal.Member<Product>("Id")); 
    } 
} 
+0

我是新來的流利NHibernate,所以糾正我,如果我錯了,但你的第一個建議,使用'IIdConvention',不是'用於設置您的屬性如何映射到數據庫列的約定?它與識別這些屬性開始無關? 第二個選項可以正常工作,但正如我在問題中所說的,我不想使用每類'ClassMap '設置,我想要一個適用於所有類的約定驅動方法。 – Tyson 2012-02-22 14:09:33

+0

我以爲你可以透露會員實施IIdConvention – Yaman 2012-02-23 14:50:43

+0

請告訴我怎麼... – Tyson 2012-02-23 14:57:42