C# NHibernate多对多计数

C# NHibernate多对多计数,c#,database,nhibernate,fluent-nhibernate,C#,Database,Nhibernate,Fluent Nhibernate,我有实体Post和Tag,两者之间存在多对多关系(例如,每个帖子可以有一个或多个标签,每个标签可以与任意数量的帖子关联) 我想要实现的是让标记实体有一个字段,提供与该标记关联的帖子数量。然而,我不知道如何在不获取全部Posts(我希望避免)的情况下获取这些内容 我使用的是Fluent NHibernate,我的实体和映射目前如下所示: 实体/Post.cs public class Post : PersistentBase { public virtual string Title {

我有实体
Post
Tag
,两者之间存在多对多关系(例如,每个帖子可以有一个或多个标签,每个标签可以与任意数量的帖子关联)

我想要实现的是让
标记
实体有一个字段,提供与该标记关联的帖子数量。然而,我不知道如何在不获取全部
Post
s(我希望避免)的情况下获取这些内容

我使用的是Fluent NHibernate,我的实体和映射目前如下所示:

实体/Post.cs

public class Post : PersistentBase
{
    public virtual string Title { get; set; }
    /* snip */

    private IList<Tag> tags = new List<Tag>();
    public virtual IEnumerable<Tag> Tags {
        get { return tags; }
    }

    public virtual void AddTag(Tag tag) {
        this.tags.Add(tag);
    }
}
public class PostMap : ClassMap<Post>
{
    public PostMap()
    {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Title);
        /* snip */
        HasManyToMany(x => x.Tags);
    }
}
public class Tag : PersistentBase
{
    public virtual string Name { get; set; }

    public static Tag Create(string name) {
        return new Tag { Name = name };
    }
}
public class TagMap : ClassMap<Tag>
{
    public TagMap ()
    {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Name).Unique();
    }
}
映射/TagMap.cs

public class Post : PersistentBase
{
    public virtual string Title { get; set; }
    /* snip */

    private IList<Tag> tags = new List<Tag>();
    public virtual IEnumerable<Tag> Tags {
        get { return tags; }
    }

    public virtual void AddTag(Tag tag) {
        this.tags.Add(tag);
    }
}
public class PostMap : ClassMap<Post>
{
    public PostMap()
    {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Title);
        /* snip */
        HasManyToMany(x => x.Tags);
    }
}
public class Tag : PersistentBase
{
    public virtual string Name { get; set; }

    public static Tag Create(string name) {
        return new Tag { Name = name };
    }
}
public class TagMap : ClassMap<Tag>
{
    public TagMap ()
    {
        Id(x => x.Id).GeneratedBy.HiLo("99");
        Map(x => x.Name).Unique();
    }
}
然后用该标签预先填写帖子的数量


我该怎么做呢?(确实可能吗?

您需要的是在标记映射中定义一个公式

以下是标记实体映射在XML中的外观(我相信您可以将其转换为流畅的NHibernate方式):


您需要的是在标记映射中定义一个公式

以下是标记实体映射在XML中的外观(我相信您可以将其转换为流畅的NHibernate方式):


如果公式是在映射类中而不是在xml文件中设置的,并且我不能使用关联表(PostTag),我该怎么办在公式中,因为表名是由另一个程序集中的约定强制执行的?@Nicolas我猜您使用的是FluentNHibenrate,但这并没有改变公式是原始SQL的事实,这意味着您必须对其中使用的表名进行硬编码。如果您知道使用的约定,那么只需将表名放在公式中,因为约定将生成它。我不知道如何让FluentNHibernate返回生成的表名(根据使用的约定),以便您可以在公式中使用它们。如果公式是在映射类而不是xml文件中设置的,并且我不能使用关联表(PostTag),我该怎么办在公式中,因为表名是由另一个程序集中的约定强制执行的?@Nicolas我猜您使用的是FluentNHibenrate,但这并没有改变公式是原始SQL的事实,这意味着您必须对其中使用的表名进行硬编码。如果您知道使用的约定,那么只需将表名放在公式中,因为约定将生成它。我不知道如何让FluentNHibernate返回生成的表名(根据使用的约定),以便您可以在公式中使用它们。