使用Entity Framework Core进行SQLite搭建的脚手架

12

当我运行时

Scaffold-DbContext "Filename=mydatabase.sqlite3" Microsoft.EntityFrameworkCore.Sqlite
我得到了一个空的上下文。
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;

namespace MyNamespace
{
    public partial class mydatabaseContext : DbContext
    {
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseSqlite(@"Filename=mydatabse.sqlite3");
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        }
    }
}

我是否做错了什么?这个对SQLite可用吗?

我在数据库中有一个单独的表,其中包含id和name,只是一个简单的例子让我开始。


请将您的解决方案作为答案发布到您的问题中。 - JW Lim
你有没有注意到上下文中的拼写错误?optionsBuilder.UseSqlite(@"Filename=mydatabse.sqlite3") 中的 mydatabse.sqlite3 是正确的吗?看起来缺少了一个 "a",也许不是很重要。 - Prodromos
3个回答

17

由于连接字符串中使用了相对路径,因此正在 bin 文件夹中创建一个新数据库。我使用了新的连接字符串。

Scaffold-DbContext "DataSource=C:\dev\mydatabase.sqlite3" Microsoft.EntityFrameworkCore.Sqlite

1
这可以解决问题,但不是一个解决方案。 - Leandro Bardelli

5

文件路径是相对于输出目录(即bin目录)解析的。请确保数据库文件在构建时被复制到输出目录。

在csproj中通过将复制到输出目录设置为如果较新则复制来完成此操作。

在xproj上,请向project.json添加以下内容。

{
  "publishOptions": {
    "include": [
      "mydatabase.sqlite"
    ]
  }
}

这促使我进行了研究和实验。也许我的笔记对于其他刚接触这方面的人会有所帮助:https://gist.github.com/definedrisk/cadd6925f8fef30ecc3ad35974c153b2 - DefinedRisk

2
你可以尝试以下方法:
Scaffold-DbContext "DataSource=PATH\mydatabase.sqlite3 "Microsoft.EntityFrameworkCore.Sqlite -OutputDir Models

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接