首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate无法附加MDF

NHibernate无法附加MDF
EN

Stack Overflow用户
提问于 2016-04-12 16:05:24
回答 1查看 373关注 0票数 0

我试图使用LocalDB连接到,但是我一直在获取异常:

在创建SessionFactory时使用了无效或不完整的配置。有关更多细节,请查看PotentialReasons集合和InnerException。

但内部例外是:

无法将文件“Test.mdf”附加为数据库“测试”。

我在使用实体框架时遇到过此错误,可以通过以下方法修复:

代码语言:javascript
复制
> sqllocaldb stop v11.0
> sqllocaldb delete v11.0

但是,在这种情况下,这是行不通的。以下是我的完整计划:

代码语言:javascript
复制
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using FluentNHibernate.Mapping;
using NHibernate.Tool.hbm2ddl;

namespace Sandbox
{
    public class Person
    {
        public virtual int Id { get; set; }
        public virtual string Name { get; set; }
    }

    public class PersonMap : ClassMap<Person>
    {
        public PersonMap()
        {
            Id(p => p.Id);
            Map(p => p.Name);
        }
    }

    public class Program
    {
        public static void Main(string[] args)
        {
            var connectionString =
                @"Data Source=(LocalDB)\v11.0;AttachDBFilename=Test.mdf;" +
                @"Initial Catalog=Test;Integrated Security=True";

            var _sessionFactory = Fluently.Configure()
                .Database(MsSqlConfiguration.MsSql2012.ConnectionString(connectionString))
                .Mappings(m => m.FluentMappings.AddFromAssemblyOf<Program>())
                .ExposeConfiguration(cfg => new SchemaExport(cfg).Create(false, true))
                .BuildSessionFactory();
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 16:39:42

问题是,与实体框架不同,NHibernate不会为您创建数据库。我首先必须执行以下操作才能创建数据库:

代码语言:javascript
复制
        var databaseName = "Test";
        var databaseFile = "Test.mdf";

        if(!File.Exists(databaseFile))
        {
            var connectionString = @"Data Source=(LocalDB)\v11.0;Integrated Security=True;";
            var query = $@"
                CREATE DATABASE {databaseName} ON PRIMARY (
                    NAME = '{databaseName}',
                    FILENAME = '{databaseFile}');";

            using(var connection = new SqlConnection(connectionString))
            {
                using(var command = new SqlCommand(query, connection))
                {
                    connection.Open();
                    command.ExecuteNonQuery();
                }
            }

            Console.WriteLine("Created database!");
        }

注:这不是生产质量代码,只是一个问题的演示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36578580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档