gpt4 book ai didi

c# - 以编程方式在任意位置从头开始创建数据库

转载 作者:搜寻专家 更新时间:2023-10-30 19:50:42 24 4
gpt4 key购买 nike

我正在开发一个使用 SQL Server Express/LocalDB 的简单桌面应用程序。我在任意非特权位置有一个数据目录,我想在其中创建一个数据库文件。我最初创建了数据库并生成了一个供 EF 使用的模型;现在我想使用该模型在任何需要的地方重新创建数据库。

我发现很多帖子都在做类似的事情,但它们似乎是通过开始工作的上下文删除和重新创建现有数据库,以用于测试目的。我想从一个空目录开始。

使用 here 中的代码摘录我能够在磁盘上物理地创建一个数据库文件,使用 SQL 语句创建新的 .mdf 和 .ldf 文件。但是他们没有模式;如果我从 .mdf 文件启动一个上下文实例,然后尝试计算表中的行数,则会抛出异常,因为该表不存在。

如果我尝试调用 ctx.Database.Create(),则会收到无法创建数据库的错误,因为它已经存在。当然可以,只是没有 table 。

如果我最初不使用原始 SQL 查询来创建新的空数据库,并且我尝试按如下方式创建上下文,其中 filespec 指向有效目录中不存在的 .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 在我的空数据库中创建表,或从头开始创建文件?

最佳答案

请尝试使用以下内容:

string connectionString
= "Data Source=(LocalDB)\\v11.0;AttachDbFilename="
+ fileSpec;

EventsListDBEntities ctx = new EventsListDBEntities();
ctx.Database.Connection.ConnectionString = connectionString;
ctx.Database.CreateIfNotExists(); // Change this line.
ctx.Database.Initialize(true);

https://msdn.microsoft.com/en-us/library/system.data.entity.database.createifnotexists%28v=vs.113%29.aspx#M:System.Data.Entity.Database.CreateIfNotExists

关于c# - 以编程方式在任意位置从头开始创建数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com