【问题标题】:domain driven design with nhibernate and sql server使用 nhibernate 和 sql server 进行域驱动设计
【发布时间】:2009-06-23 16:42:04
【问题描述】:

我有一个用于解决 DDD 问题的参考应用程序,我目前的重点是持久性。这篇文章的另一个标题可能是 DDD / TDD 持久性工具和方法,但这是一个(非常)广泛的话题,我确实有一个关于 SQL Server 的具体问题。

我将在本段中概述我当前的工具集作为背景,因此请随意跳过它来回答问题。我正在使用 NHibernate、Fluent NHibernate、Rhino、Visual Studio 2008 和 SQL Server。我目前的想法是在任何数据映射更改后使用 NHibernate 生成 db,查看 VS 2008 中生成的表,看看我的持久性映射测试是否全部通过。我最初想使用 SQLite 作为测试数据库,但我怀疑它在某些方面是否能准确衡量正确映射(如引用完整性)。然后我尝试使用 SQL Ce,但发现用 VS 观察生成的表令人沮丧。这就是为什么我现在打算首先使用 SQL Server。

以下命令对象生成 db:

public class GenerateNewDb_SqlServer : ICommand
    {
        public GenerateNewDb_SqlServer(Configuration cfg)
            : base(string.Format("Update a Sql Server Database"))
        {
            _cfg = cfg;
        }

        public override void Execute()
        {
            try
            {
                var schema = new SchemaExport(_cfg);
                schema.Create(true, true);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Schema Export Error Message: " + ex);
            }
        }
    }

问题是旧的数据库对象仍然存在。在使用 NHibernate 模式工具创建它之前,我每次都需要以某种方式删除整个 sql server db。谁能告诉我如何在代码中做到这一点?


我可以使用 NHibernate.Cfg.Configuration 对象来删除数据库吗?代码会是什么样子?

干杯, 浆果

【问题讨论】:

  • 与您的问题完全无关,但我有完全相同的思考过程“SQLite 是完美的!......哦,等等......SQL CE 是完美的!......哦等等。让我们只是使用 SQL Express。”

标签: .net nhibernate tdd domain-driven-design persistence


【解决方案1】:

谢天谢地,它已经是 SchemaExport 的一部分。我不确定它是否会删除整个数据库,但它会删除所有引用的 SQL 对象。像这样?

private void DropSchema(Configuration _cfg)
 {  
        new SchemaExport(_cfg)
            .Drop(
                false, //script to the console
                true, //execute against db
            );
 }

附:通常,您会看到此命令直接在 SchemaExport.Create 之前运行,因此您会获得一个新的数据库...

P.P.S.为 NHibernate here 提供了一堆很棒的模型驱动的东西(这个 screencast series 太棒了!)

【讨论】:

    【解决方案2】:

    考虑为您的 SQL 实体使用迁移脚本,您可以尝试

    Ruby 迁移脚本或Subsonic

    【讨论】:

      【解决方案3】:

      您只需要使用 ODBC 驱动程序对所需的 DB 执行“drop database”操作即可。

      编辑:我不相信 NHibernate 配置中有任何东西会自动为您执行此操作;它必须是您定义的外部流程的一部分。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-03-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        相关资源
        最近更新 更多