닷넷(dotnet) 엔티티 프레임워크(Entity Framework) sqlite no such table error

닷넷(dotnet) 엔티티 프레임워크(Entity Framework) sqlite no such table error

엔티티 프레임워크에 sqllite를 사용해서 프로그램을 만들어서 update-database 까지 문제 없이 완료 했지만 실행시 계속 no such table error가 나온다.

처음에는 이해가 가지 않았다.

1
2
3
4
protected override void OnConfiguring(DbContextOptionsBuilder options)
=> options.UseSqlite("Data Source=blogging.db");


위에 보면 데이터 소스를 blogging.db 파일을 보고 있다 실제로 프로젝트에서 만들어진 blogging.db 파일에는 문제가 없다

해당 코드를 컴파일후에 run 시키면 오류가 나는데 컴파일 폴더에서 보면 blogging.db 파일 사이즈가 0 이다.

이문제는 프로젝트 설정에서 아래의 값을 추가 하면 처리 된다. <StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<StartWorkingDirectory>$(MSBuildProjectDirectory)</StartWorkingDirectory>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="5.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
</Project>

위 설정을 추가하면 빌드완료후 실행시 프로젝트 디렉토리를 참조한다. 그래서 에러 코드가 나오지 않는다.

참조