首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架核心-没有找到参考的设计时服务

实体框架核心-没有找到参考的设计时服务
EN

Stack Overflow用户
提问于 2022-06-17 09:32:14
回答 1查看 343关注 0票数 1

我试图在Package控制台中运行‘-verbose’,但是在输出的末尾我得到了以下行:(我的SQL server中没有生成任何内容)

代码语言:javascript
复制
Using context 'TutoringContext'.
Finding design-time services for provider 'Microsoft.EntityFrameworkCore.SqlServer'...
Using design-time services from provider 'Microsoft.EntityFrameworkCore.SqlServer'.
Finding design-time services referenced by assembly 'LakeTutoringWebsite'...
Finding design-time services referenced by assembly 'LakeTutoringWebsite'...
No referenced design-time services were found.
Finding IDesignTimeServices implementations in assembly 'LakeTutoringWebsite'...
No design-time services were found.

我看到我可以像这样创建一个DesignTimeDbContextFactory:https://learn.microsoft.com/en-us/ef/core/cli/dbcontext-creation?tabs=dotnet-core-cli

但是构造函数必须是非参数的,所以我不能传递IConfiguration对象来获取连接字符串。如何在不对连接字符串进行硬编码的情况下运行“更新-数据库”?

基于上面的链接,我想我将能够运行‘更新-数据库’,因为我已经将我的DBContext添加到服务中。

我在我的项目中为我的DBContext使用依赖注入:

代码语言:javascript
复制
public class Startup
{
        public void ConfigureServices(IServiceCollection services)
        {
            services.AddRazorPages();
            services.AddDbContext<TutoringContext>(options =>
               options.UseSqlServer(Configuration.GetConnectionString("LakeTutoringDatabase")));
        }
}

public class Program
{
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
}

public class TutoringContext : IdentityDbContext<IdentityUser>
{
    public DbSet<Comment> Comments { get; set; }

    public TutoringContext(DbContextOptions<TutoringContext> options) : base(options)
    {
    }

}

我正在使用ASP.NET Core3.1

我使用System.Configuration.Configuration安装了6.0.0版本的NuGet。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-17 09:56:18

首先,除了创建IDesignTimeDbContextFactory的实现之外,您的项目还需要添加对包的引用:

代码语言:javascript
复制
Microsoft.EntityFrameworkCore.Design

通常,硬编码字符串在这个类中并不坏,因为您只是在使用开发数据库。理想情况下,您可以在应用程序启动时(而不是命令行中的update-database )将迁移应用程序应用到其他数据库(暂存、测试、生产),这些数据库将使用通过appsettings.json访问的IConfiguration文件中的值。

但是,如果您确实希望从json文件中访问开发连接字符串,那么这个链接可以很好地引导您浏览它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72657254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档