.NET Core库中的EF Core

4
主要思路是将EF Core nuget包添加到.NET Core库项目中,然后在许多应用程序中(如ASP.NET Core、Win Service、Console App)使用该库,而无需在每个应用程序中配置EF。如果可能,也不需要在每个应用程序中添加EF包。我想知道这是否可行。
我目前的问题是无法基于我在库项目中拥有的模型创建数据库。
似乎我不能只选择库项目并运行update-database。它要求我实现“IDesignTimeDbContextFactory”。
我正在使用.NET Core 2.1,如果我将其更新到最新版本,这会有所帮助吗?
2个回答

2
是的,你可以做到这一点。
确保您已安装所有必要的先决条件。
  1. 创建一个 .NET Core 控制台应用程序
  2. 为 Entity Framework 创建一个核心类库
  3. 从控制台应用程序引用类库
  4. 生成数据库代码,请转到工具>包管理器控制台
  5. 从下拉列表中将默认项目设置为类库,以便在那里生成代码。
  6. 在控制台中运行以下命令(基于数据库的方法):Scaffold-DbContext "您的连接字符串" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models/EF -f
  7. 创建一个类来获取您的上下文
注:Original Answer 翻译成“最初的回答”
public class Context
    {
// See all queries generated by EF in debug window
        public static readonly LoggerFactory MyLoggerFactory
            = new LoggerFactory(new[] { new DebugLoggerProvider((s, level) => level >= LogLevel.Trace) });
        public static DF.Data.Models.EF.YourContext GetContext()
        {
            var optionsBuilder = new DbContextOptionsBuilder<DF.Data.Models.EF.YourContext>();
            optionsBuilder.UseSqlServer(
                "Your Connection String").UseLoggerFactory(MyLoggerFactory);
            return new DF.Data.Models.EF.YourContext(optionsBuilder.Options);
        }

        public partial class YourContext : DbContext
        {
            public YourContext(DbContextOptions optionsBuilderOptions) : base(optionsBuilderOptions)
            {
            }
        }
    }
  1. 如果需要,可以创建一个存储查询的Repository类。

注意:当重新生成数据库时,请确保从下拉菜单中选择Class库项目作为默认项目。然后将其他项目设置回启动项目。


(注:Original Answer翻译成“最初的回答”)

2
如错误所示,您需要实现IDesignTimeDbContextFactory,它是Microsoft.EntityFrameworkCore.Design包的一部分,请安装该包。然后创建一个适当实现IDesignTimeDbContextFactory的类。
由于您创建了一个.NET Core库,请将其设置为启动项目。
然后在Package Manager Console中,选择您的库作为默认项目并运行update-database命令。"最初的回答"

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