4

次のエンティティがあります:

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();
    }
}

このエンティティを機能させるために流暢なインターフェイスを使用して読み取り専用プロパティをマップする方法はありますか?

4

1 に答える 1

8

なぜそれをマッピングしたいのですか?これは、いくつかのコード(メソッドの場合もあります)を実行する単なる.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();
于 2012-04-24T07:21:02.180 に答える