使用 ASP.NET Core 和 Entity Framework 创建新数据库时出现错误 FileNotFound System.Data.SqlClient
Error FileNotFound System.Data.SqlClient when creating new database using ASP.NET Core and Entity Framework
我已经开始学习 MVC 和 ASP.NET Core。我一直在关注在线视频教程以适应 MVC,但在使用 Entity Framework 在 localDb 中创建数据库时我遇到了 运行 问题。
应在 localDb 中创建一个名为 'AspNetBlog' 的数据库(如果尚未创建)。当覆盖 OnConfiguring() 方法时,这应该发生在 BlogDataContext.cs 模型中,如 BlogDataContext.cs.
中所示
我收到的错误是“FileNotFoundException:无法加载文件或程序集'System.Data.SqlClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。系统找不到指定的文件。”
错误的完整输出可以在这里看到:https://gyazo.com/d8019f4b09732eb059bd291a7881b16b
请注意,我已通过进入 VS2015 的命令提示符并输入 sqllocaldb start 确保 localDb 运行ning。
我不确定我必须做什么才能修复此错误并成功创建数据库。该教程于 2015 年初发布,当时仍在使用 ASP.NET 5,因此由于我确定我已正确按照教程进行操作,因此我认为问题出在那里。
下面你可以看到我的代码。
BlogDataContext.cs
到达语句"Database.EnsureCreated();"时遇到错误。调试状态的输出“异常抛出:'System.IO.FileNotFoundException' in EntityFramework.Relational.dll”。
using Microsoft.Data.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AspNetBlog.Models
{
public class BlogDataContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public BlogDataContext()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
var connectionString = @"Server=(LocalDb)\MSSQLLocalDb;Database=AspNetBlog";
optionsBuilder.UseSqlServer(connectionString);
}
}
}
Post.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace AspNetBlog.Models
{
public class Post
{
public long Id { get; set; }
public string Title { get; set; }
public DateTime PostedDate { get; set; }
public string Author { get; set; }
public string Body { get; set; }
}
}
PostsController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using AspNetBlog.Models;
// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
namespace AspNetBlog.Controllers
{
public class PostsController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Create(Post post)
{
if (!ModelState.IsValid)
return View(post);
post.PostedDate = DateTime.Now;
post.Author = User.Identity.Name;
// Create new instance of blog data context
BlogDataContext db = new BlogDataContext();
db.Posts.Add(post); // - What should be added
await db.SaveChangesAsync(); // - Save changes to DB (Execute)
return View();
}
}
}
project.json
这里可以看到我用的是"EntityFramework.SqlServer": "7.0.0-beta8"。在我关注的教程中,使用了 "7.0.0-beta4" 版本。我尝试使用与教程中使用的版本相同的版本,但它似乎与 .NET Core 不兼容。
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.1",
"EntityFramework.SqlServer": "7.0.0-beta8"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
感谢您的阅读。欢迎和赞赏任何建议。
现在有 Entity Framework Core 的候选版本。尝试更新您的 project.json 以指向它。
终于自己修好了。在 'project.json' 文件中,我添加了以下依赖项:
"System.Data.SqlClient": "4.1.0"
确保它是这样写的,而不是小写字母。这实际上是我尝试过的第一件事,但我一开始是用小写字母写的,然后从控制台得到了一个错误。我做的教程是"Up and Running with ASP.NET 5"。 (所以其他像我一样正在做这个教程并且 运行 遇到同样问题的人可以找到这个,以防万一)
我已经开始学习 MVC 和 ASP.NET Core。我一直在关注在线视频教程以适应 MVC,但在使用 Entity Framework 在 localDb 中创建数据库时我遇到了 运行 问题。
应在 localDb 中创建一个名为 'AspNetBlog' 的数据库(如果尚未创建)。当覆盖 OnConfiguring() 方法时,这应该发生在 BlogDataContext.cs 模型中,如 BlogDataContext.cs.
中所示我收到的错误是“FileNotFoundException:无法加载文件或程序集'System.Data.SqlClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'。系统找不到指定的文件。”
错误的完整输出可以在这里看到:https://gyazo.com/d8019f4b09732eb059bd291a7881b16b
请注意,我已通过进入 VS2015 的命令提示符并输入 sqllocaldb start 确保 localDb 运行ning。
我不确定我必须做什么才能修复此错误并成功创建数据库。该教程于 2015 年初发布,当时仍在使用 ASP.NET 5,因此由于我确定我已正确按照教程进行操作,因此我认为问题出在那里。
下面你可以看到我的代码。
BlogDataContext.cs
到达语句"Database.EnsureCreated();"时遇到错误。调试状态的输出“异常抛出:'System.IO.FileNotFoundException' in EntityFramework.Relational.dll”。
using Microsoft.Data.Entity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace AspNetBlog.Models
{
public class BlogDataContext : DbContext
{
public DbSet<Post> Posts { get; set; }
public BlogDataContext()
{
Database.EnsureCreated();
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
base.OnConfiguring(optionsBuilder);
var connectionString = @"Server=(LocalDb)\MSSQLLocalDb;Database=AspNetBlog";
optionsBuilder.UseSqlServer(connectionString);
}
}
}
Post.cs
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;
namespace AspNetBlog.Models
{
public class Post
{
public long Id { get; set; }
public string Title { get; set; }
public DateTime PostedDate { get; set; }
public string Author { get; set; }
public string Body { get; set; }
}
}
PostsController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using AspNetBlog.Models;
// For more information on enabling MVC for empty projects, visit http://go.microsoft.com/fwlink/?LinkID=397860
namespace AspNetBlog.Controllers
{
public class PostsController : Controller
{
// GET: /<controller>/
public IActionResult Index()
{
return View();
}
[HttpPost]
public async Task<IActionResult> Create(Post post)
{
if (!ModelState.IsValid)
return View(post);
post.PostedDate = DateTime.Now;
post.Author = User.Identity.Name;
// Create new instance of blog data context
BlogDataContext db = new BlogDataContext();
db.Posts.Add(post); // - What should be added
await db.SaveChangesAsync(); // - Save changes to DB (Execute)
return View();
}
}
}
project.json
这里可以看到我用的是"EntityFramework.SqlServer": "7.0.0-beta8"。在我关注的教程中,使用了 "7.0.0-beta4" 版本。我尝试使用与教程中使用的版本相同的版本,但它似乎与 .NET Core 不兼容。
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.1",
"type": "platform"
},
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Mvc.TagHelpers": "1.0.1",
"EntityFramework.SqlServer": "7.0.0-beta8"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
感谢您的阅读。欢迎和赞赏任何建议。
现在有 Entity Framework Core 的候选版本。尝试更新您的 project.json 以指向它。
终于自己修好了。在 'project.json' 文件中,我添加了以下依赖项:
"System.Data.SqlClient": "4.1.0"
确保它是这样写的,而不是小写字母。这实际上是我尝试过的第一件事,但我一开始是用小写字母写的,然后从控制台得到了一个错误。我做的教程是"Up and Running with ASP.NET 5"。 (所以其他像我一样正在做这个教程并且 运行 遇到同样问题的人可以找到这个,以防万一)