【发布时间】:2015-08-19 21:55:40
【问题描述】:
我正在开发一个使用 SQL Server Express/LocalDB 的简单桌面应用程序。我在任意非特权位置有一个数据目录,我想在那里创建一个数据库文件。我最初创建了数据库并生成了一个模型供 EF 使用;现在我想使用该模型在任何我想要的地方重新创建数据库。
我发现很多帖子都在做类似的事情,但他们似乎正在通过一个开始工作的上下文删除和重新创建现有数据库,以用于测试目的。我想从一个空目录开始。
使用here 中的代码提取我能够在磁盘上物理创建一个数据库文件,使用SQL 语句创建新的.mdf 和.ldf 文件。但是他们没有架构;如果我从 .mdf 文件启动上下文实例,然后尝试计算表中的行数,我会因为表不存在而引发异常。
如果我尝试调用ctx.Database.Create(),则会收到无法创建数据库的错误,因为它已经存在。当然可以,只是没有桌子。
如果我最初不使用原始 SQL 查询来创建新的空数据库,我尝试按如下方式创建上下文,其中 filespec 指向有效目录中不存在的 .mdf 文件,.mdf 文件。 Create() 总是抛出异常“无法创建数据库'',因为它已经存在”
string connectionString
= "Data Source=(LocalDB)\\v11.0;AttachDbFilename="
+ fileSpec;
EventsListDBEntities ctx = new EventsListDBEntities();
ctx.Database.Connection.ConnectionString = connectionString;
ctx.Database.Create();
ctx.Database.Initialize(true);
如何让 EF 在我的空数据库中创建表,或从头开始创建文件?
【问题讨论】:
标签: c# sql-server database entity-framework