gpt4 book ai didi

asp.net - EF 4.1 代码优先初始化 - 替代方案

转载 作者:行者123 更新时间:2023-12-02 17:17:42 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 和代码优先方法构建一个 Web 应用程序,到目前为止我真的很喜欢它,除了一件事。初始化过程和播种数据都是垃圾。

我已经按照 ASP.NET MVC 的建议进行了设置,并在应用程序启动中调用了 setinitialiser 并使用自定义初始化类来添加数据,但它似乎总是默默地失败并且从不工作。 (数据库创建工作正常,只是数据初始化失败)

任何人都可以为此提供推荐的练习或从文件运行 sql 脚本的方法。

给定的添加数据的方法,特别是对于演示站点来说,似乎很麻烦,我更喜欢直接从作为安装过程的一部分运行一次的文件运行数据库脚本的能力,而不是依赖于以下过程:失败,没有任何迹象表明出现问题。

编辑

我注意到它抛出异常(愚蠢的 datetime -> datetime2 转换错误,应该由 Entity Framework 处理。)

但部分问题可能是我的 Express 2010 版本没有因错误而中断,调试时似乎有很多错误。

但问题仍然存在。我发现它本质上是在数据库上运行 sql 脚本的一种麻烦且有缺陷的方式。当有人在 IIS 中安装我的 Web 应用程序时,不希望仅仅为了设置演示站点而使用大量方法和类。

最佳答案

如果您想从初始化程序运行 SQL 脚本,我建议添加

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;


string scriptDirectory = HttpContext.Current.Server.MapPath("~/SqlScripts");
string sqlConnectionString = context.Database.Connection.ConnectionString;
DirectoryInfo di = new DirectoryInfo(scriptDirectory);
FileInfo[] rgFiles = di.GetFiles("*.sql");
foreach (FileInfo fi in rgFiles)
{
FileInfo fileInfo = new FileInfo(fi.FullName);
using (TextReader reader = new StreamReader(fi.FullName))
{
using (SqlConnection connection = new SqlConnection(context.Database.Connection.ConnectionString))
{
Server server = new Server(new ServerConnection(connection));
server.ConnectionContext.ExecuteNonQuery(reader.ReadToEnd());
}
reader.Close();
reader.Dispose();
}
}

使用 SqlServer 管理对象的原因是您可以在脚本中使用“GO”。然后,从 SSMS 编写脚本并将脚本粘贴到您的 SqlScripts 目录中就变得非常容易。

您可以在以下位置找到 SMO 库:

C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.ConnectionInfo.dllC:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Management.Sdk.Sfc.dllC:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll

如果您需要帮助编写数据脚本

SP_Generate_Inserts

关于asp.net - EF 4.1 代码优先初始化 - 替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5770783/

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