2011-06-12 59 views
6

我有一個名爲IEntity的接口,直到現在有一​​個名爲實體的具體類,此接口具有隻讀屬性。我寧願映射接口,但因爲接口不能有私人領域,我不能使用選項camelcase字段與前綴選項來映射它,所以我能做什麼?使用nhibernate是否有任何方法來映射只讀屬性的接口

public interface IEntity 
{public readonly string Name{get;} } 

public class Entity:IEntity 
{public readonly string Name{get;}} 

public class EntityMap:ClassMap<IEntityMap> 
{ 
    //how to map the readonly property 
} 
+2

'public readonly string Name {get;}'我不認爲這是有效的C#。字段可以標記爲「只讀」。屬性是隻讀的,不需要任何setter。界面成員沒有可見性說明符。 – CodesInChaos 2011-06-12 17:01:19

+0

我相信,公共getter和Protected setter應該允許NH成功映射。 – 2011-06-12 17:05:08

回答

14

嘗試:

<property name="Name" type="string" access="readonly"/> 

NHibernate Read Only Property Mapping

,如果你使用流利的:

Mapping a read-only property with no setter using Fluent NHibernate

我覺得這可能是太有用:

How to map an interface in nhibernate?

更新

我認爲第一步是正確的代碼。然後嘗試發佈您的映射文件或流暢的配置。如果不清楚你想達到什麼目標,我們無法幫助你。

+0

的問題是,一些如何我想設置該屬性,但因爲我不能使用私人領域,我不能夠設置專用一個,而不是公衆一個 – Adrakadabra 2011-06-12 17:14:38

+0

我已經更新了帖子! – danyolgiax 2011-06-12 17:24:08

2

您將NHibernate中的類映射爲非接口。正如其他人指出的那樣,您將readonly關鍵字與只讀屬性混淆在一起:readonly關鍵字意味着該字段只能在構造函數中設置。一個只讀屬性沒有或一個私人setter。

但我認爲你可以實現你想要使用這個東西:

public interface IEntity 
{ 
    string Name { get; } 
} 

public class Entity : IEntity 
{ 
    public string Name { get; private set; } 
} 

public class EntityMap : ClassMap<Entity> 
{ 
    public EntityMap() 
    { 
     Map(x => x.Name); 
    } 
} 

NHibernate的使用反射,因此能夠設置Name屬性,但它是隻讀的應用程序中。

相關問題