我遵循了关于Entity Framework7的Getting Started on ASP.NET 5指南,并用Sqlite替换了MicrosoftSqlServer,代码中唯一的区别是Startup.cs:

services.AddEntityFramework()
    .AddSqlite()
    .AddDbContext<BloggingContext>(options => options.UseSqlite("Filename=db.db"));

当我运行网站并导航到/blog时,我会收到一个错误:

用户代码未处理Microsoft.Data.Sqlite.SqliteException
错误代码=-2147467259 HResult=-2147467259消息=SQLite错误1: ‘没有这样的表:博客’Source=Microsoft.Data.Sqlite
SqliteErrorCode=1 StackTrace: 在Microsoft.Data.Sqlite.Interop.MarshalEx.ThrowExceptionForRC(Int32 RC, Sqlite3句柄db) 在Microsoft.Data.Sqlite.SqliteCommand.ExecuteReader(CommandBehavior 行为) 在Microsoft.Data.Sqlite.SqliteCommand.ExecuteDbDataReader(CommandBehavior 行为) 在System.Data.Common.DbCommand.ExecuteReader() 在Microsoft.Data.Entity.Query.Internal.QueryingEnumerable.Enumerator.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在System.Linq.Enumerable.d__1`2.MoveNext() 在System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() 在Microsoft.Data.Entity.Query.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext() 在System.Collections.Generic.List`1..ctor(IEnumerable`1集合) 在System.Linq.Enumerable.ToList[TSource](IEnumerable`1源) 位于d:\arthur\Documents\visual studio中的EFGetStarted.AspNet5.Controllers.BlogsController.Index() 2015\Projects\EFGetStarted.AspNet5\src\EFGetStarted.AspNet5\Controllers\BlogsController.cs:regel 18内部异常:

我理解这一点就好像没有叫做"Blog"的表,但当我打开.db文件在SQLite的db浏览器中,实际上有一个名为"Blog"的表:

Screenshot from DB Browser for SQLite showing a table called 'Blog'

SQLite是否需要在代码中进行其他更改,或者这是实体框架SQLite连接器中的错误?

推荐答案

EF实际打开的数据库很可能不是您在DB Browser中打开的文件.SQLite使用进程当前工作目录,如果在IIS或其他服务器中启动,它可以是与源代码目录不同的文件夹.(见第https://github.com/aspnet/Microsoft.Data.Sqlite/issues/132期和第https://github.com/aspnet/Microsoft.Data.Sqlite/issues/55期).

要确保数据库文件位于正确位置,请使用绝对路径.示例:

public class Startup
{
    private IApplicationEnvironment _appEnv;

    public Startup(IApplicationEnvironment appEnv)
    {
        _appEnv = appEnv;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFramework()
            .AddSqlite()
            .AddDbContext<MyContext>(
                options => { options.UseSqlite($"Data Source={_appEnv.ApplicationBasePath}/data.db"); });
    }
}

Asp.net相关问答推荐

设置主键时KeyAttribute属性不起作用

如何在 C#/MVC 4 中的 Html.TextBoxFor 中输入占位符文本

我可以强制刷新我的样式表文件吗?

逐步 ASP.NET 自动构建/部署

IIS 中 ASP.net 应用程序的单独应用程序池

在 appSettings 中存储字符串数组?

如何使用 jQuery 设置 outerHTML

如何在 ASP.NET core rc2 中禁用浏览器缓存?

ASP.NET Web 应用程序消息框

ASP.NET IIS - 请求何时排队?

MvcBuildViews true 与 ASP.NET MVC 2 中的实体框架

为什么我不能在 ASP.net MVC 中使用服务器控件?

返回 IHttpActionResult vs IEnumerable vs IQueryable

使用 NancyFx 的好处?

如何使用自动生成的列隐藏 ASP.NET GridView 中的列?

如何在 ASP.NET 下拉列表中添加选项组?

从 IFrame 重定向父页面

您正在使用哪些身份验证和授权方案 - 为什么?

在 Asp.Net MVC 5 中获取登录用户的用户 ID

x-powered by是什么意思?