我有下一个实体:
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 :(得分:7)
你为什么要映射它?它只是一个执行某些代码的.NET属性(也可能是一个方法),与数据库无关,只是根本不映射它。
如果您需要一个真正的数据库属性(其值来自数据库列)映射为只读:
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();