【问题标题】:How to delete records in JOIN table (many-to-many) using NHibernate without knowing table name如何在不知道表名的情况下使用 NHibernate 删除 JOIN 表中的记录(多对多)
【发布时间】:2016-03-14 20:10:45
【问题描述】:

我正在尝试删除 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();
    }
}

如何在不硬编码表名且不启用级联删除的情况下删除“BlogPostTags”表中的记录?

【问题讨论】:

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


    【解决方案1】:

    可以从配置中获取表名

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

    【讨论】:

    • 好的。你如何获得配置?
    • 棘手的部分是获取用于创建会话工厂的NHibernate.Cfg.Configuration 对象。在我的例子中,我有一个“数据上下文”对象来包装我的 NHibernate 会话和会话工厂,所以我只是在该类上添加了一个属性来保存配置。
    猜你喜欢
    • 2011-05-06
    • 2021-08-16
    • 2015-03-22
    • 1970-01-01
    • 2015-08-12
    • 1970-01-01
    • 2022-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多