ASP.NET 5, EF 7 및 SQLite - SQLite 오류 1 : '해당 테이블 없음 : 블로그'

asp.net asp.net-core entity-framework entity-framework-core sqlite

문제

Entity Framework 7에 대한 ASP.NET 5 시작 설명서를 따라 가면서 Microsoft SQL Server를 Sqlite로 바꿨습니다. 코드의 유일한 차이점은 Startup.cs에 있습니다.

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

웹 사이트를 실행하고 / Blogs로 이동하면 오류가 발생합니다.

Microsoft.Data.Sqlite.SqliteException이 사용자 코드에 의해 처리되지 않았습니다.
ErrorCode = -2147467259 HResult = -2147467259 메시지 = SQLite 오류 1 : '해당 테이블 없음 : Blog'Source = Microsoft.Data.Sqlite
SqliteErrorCode = 1 StackTrace : Microsoft.Data.Sqlite.Interop.MarshalEx.ThrowExceptionForRC (Int32 rc, Sqlite3Handle 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 () at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext () at Microsoft.Data.Entity.Query.LinqOperatorProvider.ExceptionInterceptor`1.EnumeratorExceptionInterceptor.MoveNext () at System.Collections.Generic .List`1..ctor (IEnumerable`1 컬렉션) System.Linq.Enumerable.ToList [TSource] (IEnumerable`1 소스)에서 EFGetStarted.AspNet5.Controllers.BlogsController.Index () d : \ arthur \ documents \ Visual Studio 2015 \ Projects \ EFGetStarted.AspNet5 \ src \ EFGetStarted.AspNe t5 \ Controllers \ BlogsController.cs : regel 18 InnerException :

나는 'Blog'라는 테이블이없는 것처럼 이것을 이해하지만 SQLite 용 DB Browser에서 .db 파일을 열면 실제로 'Blog'라는 테이블이 있습니다.

'Blog'라는 테이블을 보여주는 SQLite 용 DB Browser의 스크린 샷

SQLite는 코드에서 다른 변경 사항을 필요로합니까? 아니면 Entity Framework의 SQLite 커넥터에서이 오류입니까?

수락 된 답변

EF가 실제로 여는 데이터베이스는 DB 브라우저에서 여는 파일이 아닙니다. SQLite는 프로세스 현재 작업 디렉토리를 사용합니다. IIS 또는 다른 서버에서 실행되면 소스 코드 디렉토리와 다른 폴더가 될 수 있습니다. ( https://github.com/aspnet/Microsoft.Data.Sqlite/issues/132https://github.com/aspnet/Microsoft.Data.Sqlite/issues/55 )를 참조하십시오.

db 파일이 올바른 위치에 있는지 확인하려면 절대 경로를 사용하십시오. 예:

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"); });
    }
}

인기 답변

IApplicationEnvironment가 IHostingEnvironment로 대체 되었기 때문에 상황이 변경된 것처럼 보입니다.

IApplicationEnvironment \ IRuntimeEnvironment 제거

public class Startup
{
    private IHostingEnvironment _appHost;

    public Startup(IHostingEnvironment appHost)
    {
        _appHost = appHost;
    }
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFrameworkSqlite()
            .AddDbContext<MyContext>(
                options => { options.UseSqlite($"Data Source={_appHost.ContentRootPath}/data.db"); });
    }
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.