如何在不知道 table 名称的情况下使用 NHibernate 删除 JOIN table(多对多)中的记录

How to delete records in JOIN table (many-to-many) using NHibernate without knowing table name

我正在尝试删除 NHibernate 中映射 table 的所有记录,作为通过浏览器进行功能测试设置的一部分。从其他问题中,我得到了所有映射的 classes 的 class 元数据,这让我得到了 table 名称。从那里我正在对数据库执行 SQL 删除语句。这工作得很好,除了我有一个连接 table 不是直接映射的,而是作为多对多关系的一部分映射的。

正是这个table,多对多的关系,我需要弄清楚,但我不知道该怎么做。虽然我不能 post 确切的映射,但这里是数据库模式的近似值:

BlogPosts
---------
BlogPostId (Primary Key)

Tags
----
TagId (Primary Key)

BlogPostTags
------------
BlogPostId (Foreign Key)
TagId (Foreign Key)

以及 Fluent NHibernate 映射的近似值:

public class BlogPostMap : ClassMap<BlogPost>
{
    public BlogPostMap()
    {
        // ...

        HasManyToMany(post => post.Tags)
            .Table("BlogPostTags")
            .ChildKeyColumn("TagId")
            .ParentKeyColumn("BlogPostId")
            .AsSet()
            .Access.CamelCaseField()
            .Cascade.All();
    }
}

如何在不对 table 名称进行硬编码且不启用级联删除的情况下删除 "BlogPostTags" table 中的记录?

您可以从配置中获取table名称

Configuration config = ...
var collection = (Collection)config.GetClassMapping(typeof(BlogPost)).GetProperty("Tags").Value;
var tablename = collection.CollectionTable.GetQualifiedName(Dialect.GetDialect(config.Properties));