如何在不知道表名

时间:2016-03-14 20:10:45

标签: c# sql-server nhibernate fluent-nhibernate

我尝试删除NHibernate中映射表的所有记录,作为通过浏览器进行功能测试设置的一部分。从其他问题来看,我得到了所有映射类的类元数据,它获取了表名。从那里我执行针对数据库的SQL删除语句。这很好用,除了我有一个没有直接映射的连接表,但它被映射为多对多关系的一部分。

这张桌子,多对多关系,我需要清除,我无法弄清楚如何做到这一点。虽然我无法发布确切的映射,但这里是数据库模式的近似值:

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

如何删除&#34; BlogPostTags&#34;中的记录?表没有硬编码表名,没有启用级联删除?

1 个答案:

答案 0 :(得分:1)

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

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