4

我的下一個實體:NHibernate的只讀屬性 - 流利的映射

public class Topic : EntityBase 
{ 
    private readonly ICollection<Vote> _votes; 

    public virtual string Title { get; protected set; } 
    public virtual ICollection<Vote> Votes 
    { 
     get { return _votes; } 
    } 

    public virtual int VotedUpCount 
    { 
     get 
     { 
      return _votes.Count(v => v.VotedTo == VoteType.VoteUp); 
     } 
    } 
} 

我需要映射我VotedUpCount(因爲我有一個從NH錯誤)。 但是我不需要這個屬性作爲我的數據庫中的列。

我想這一個,並得到一個錯誤Invalid column name 'VotedUpCount'.

public class TopicMap : ClassMap<Topic> 
{ 
    public TopicMap() 
    { 
     Id(x => x.Id); 
     Map(x => x.Title); 
     Map(x => x.VotedUpCount).Access.ReadOnly(); 
     HasMany<Vote>(x => x.Votes) 
      .Cascade.All(); 
    } 
} 

有沒有辦法用流利的接口,使這個實體合作,只讀屬性映射?

+0

你接受你的情況*基於的措辭不應該工作回答您的題*。請編輯問題以匹配答案或取消接受答案。 – 2015-10-19 16:56:59

回答

7

爲什麼要映射它?它只是一個執行一些代碼(也可能是一個方法)的.NET屬性,並且與數據庫無關,只是根本不映射它。

如果你需要一個真正的DB屬性(其中值來自DB列)映射爲只讀:

Map(x => x.PropertyName).Column("ColumnName").ReadOnly(); 
// Alternative (does exactly the same, but is more like the NHibernate mapping: 
Map(x => x.PropertyName).Column("ColumnName").Not.Insert().Not.Update(); 
+0

例如,我有一個預定義的數據,並將其加載到數據庫中。我想讓數據不變,我該怎麼做? – Anton 2012-04-24 08:06:27

+0

@Anton在你的問題中,你說你沒有DB中的財產。無論如何,我已經更新了我的答案,以包含只讀的數據庫屬性映射。 – cremor 2012-04-24 08:17:01

+2

測試兩個版本:.ReadOnly();和.Not.Insert()。Not.Update(); 我確定他們不是「完全一樣」,他們實際上有不同的後果(可能是流利的錯誤)。 .Not.Insert()Not.Update();不能與映射到同一列的第二個字段一起使用,因爲在更新時它將在sql子句中列出兩次列。 – 2012-08-28 15:36:41