流畅的NHibernate本地mdf文件不保留表结构

时间:2017-10-19 14:04:15

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

我已经使用 Fluent NHibernate 和SQL Server设置了我的数据库,并且它与 SQL Server 一起运行良好。每次我执行代码时,都会创建数据库结构并插入数据,使应用程序界面完美运行。如果我关闭程序,数据库和内容将保存。

我不希望SQL服务器中的数据库,我希望数据库是解决方案文件结构中的* .mdf文件。所以我可以在没有安装过程的情况下复制应用程序。

问题以及本主题的原因是,在解决方案文件结构中使用该文件,应用程序在运行时运行良好,但是当我关闭应用程序时,数据全部消失。如果我再次启动应用程序,我插入的数据就会消失。

我的类是SQL Server的以下内容:

class NHibernateHelper
{
    private static ISessionFactory _sessionFactory;

    private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
                InitializeSessionFactory();

            return _sessionFactory;
        }
    }

    private static void InitializeSessionFactory()
    {
        _sessionFactory = Fluently.Configure()
            .Database(
                MsSqlConfiguration.MsSql2012
                .ConnectionString(@"server=MyComputer;Database=MyDatabase;Trusted_Connection=true;")
                .ShowSql())
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<MyEntity>())
            .ExposeConfiguration(cfg => new SchemaUpdate(cfg).Execute(true, true))
            .BuildSessionFactory();
    }

    public static ISession OpenSession()
    {
        return SessionFactory.OpenSession();
    }
}

对于本地文件,我只需更改 ConnectionString 行:

.ConnectionString(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename="+AppDomain.CurrentDomain.BaseDirectory+ "General\\Data\\MyDatabase.mdf" + ";Integrated Security=True;")

要将数据提交/持久化到数据库,我使用以下结构:

        using (var session = NHibernateHelper.OpenSession())
        {
            using (var transaction = session.BeginTransaction())
            {

                var newEntity = new EntEntity
                {
                    //Data to populate

                };

                session.SaveOrUpdate(newEntity);
                transaction.Commit();

                if (transaction.WasCommitted)
                {
                    MessageAndCleanInterface("Sucessful created!");
                }
            }
        }

有谁知道为什么会这样? 此时,我不介意使用其他类型的数据库类型,我将开始用其他类型进行测试。 不过,我想知道原因。

1 个答案:

答案 0 :(得分:1)

Visual Studio会在每次构建时覆盖.mdf。如果您只启动.exe文件而不构建新文件,则应保留您的数据。