具有配置的类库中的 Entity Framework 7 迁移脚手架

2024-02-05

尝试将迁移添加到 ASP.NET 5 类库中的 EF7 模型。跑步时dnx . ef migration add mymigration失败并产生不同的结果,具体取决于我运行它的项目。

如果我在主项目的文件夹中运行它,它无法找到DbContext,这是有道理的,因为DbContext位于共享项目中,并且 ef 命令可能不关心依赖关系。

如果我在共享项目的文件夹中运行它,它无法访问startup.cs中指定的连接字符串。我从诸如此类的问题中收集到this https://stackoverflow.com/questions/30786505/cannot-run-migration-on-entity-framework-7-beta4-in-class-library-package如果您在共享项目中指定连接字符串,它确实可以工作OnConfiguring的方法DbContext但我真的想让这段代码与配置分开。

我遇到了一些问题日志 https://github.com/aspnet/EntityFramework/issues/823在 EF7 存储库中提到他们实现了用于指定项目和上下文的命令行选项,但没有示例,我无法通过查看提交历史记录中的源代码来弄清楚如何使用它。


这是一种可能适合您的方法。

如果我在共享项目的文件夹中运行它,它无法访问startup.cs中指定的连接字符串。

启动.cs

我假设在您的 Startup.cs 中,您通过访问指定连接字符串Configuration而不是通过硬编码来实现。此外,我假设在 Startup.cs 文件的构造函数中,您正在从几个来源设置配置。换句话说,您的 Startup.cs 可能如下所示:

public class Startup
{
    public IConfiguration Config { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var config = new Configuration()
            .AddJsonFile("config.json")
            .AddUserSecrets()
            .AddEnvironmentVariables();

        Config = config;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<MyDbContext>(options =>
            {
                options.UseSqlServer(Config["ConnectionStrings:MyDbContext"]);
            });
    }

    public void Configure(IApplicationBuilder app, IServiceProvider serviceProvider)
    {
        var db = serviceProvider.GetRequiredService<MyDbContext>();
        db.Database.AsSqlServer().EnsureCreated();

        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("Hello World!");
        });
    }
}

配置.json

此外,我假设您将连接字符串添加到项目根目录中的 config.json (或者通过用户机密或环境变量添加它。)您的 config.json 可能如下所示:

{
  "ConnectionStrings": {
    "MyDbContext": "Some-Connection-String"
  }
}

如果您不这样做,那么可能值得尝试。

我从这样的问题中了解到,如果您在 DbContext 的 OnConfiguring 方法中指定连接字符串,它确实可以在共享项目中工作,但我真的希望将此代码与配置分开。

数据库上下文

如果我上面的假设是正确的,那么您可以访问连接字符串DbContext通过使用与您在中使用的相同的模式Startup班级。也就是说,在DbContext构造函数,设置IConfiguration。然后,在OnConfiguring,访问连接字符串。它可能看起来像这样:

public class MyDbContext : DbContext
{
    protected override void OnModelCreating(ModelBuilder builder)
    {
        builder.Entity<SomeModel>().Key(e => e.Id);
        base.OnModelCreating(builder);
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        var connString = Config["ConnectionStrings:MyDbContext"];
        optionsBuilder.UseSqlServer(connString);
    }

    public IConfiguration Config { get; set; }

    public MyDbContext()
    {
        var config = new Configuration()
            .AddJsonFile("config.json")
            .AddEnvironmentVariables();

        Config = config;
    }
}

项目结构

当然,您的共享项目文件夹的根目录中还需要有一个 config.json 文件。因此,您的项目结构可能如下所示:

SharedDataContext
    Migrations
    config.json
    project.json

WebApp
    config.json
    project.json
    Startup.cs

在上面,两个 config.json 文件都包含一个连接字符串设置DbContext.

一些想法

如果您不喜欢重复 config.json 连接字符串内容,那么您可以使用环境变量或用户机密。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

具有配置的类库中的 Entity Framework 7 迁移脚手架 的相关文章

  • Access / Word 2010 VBA 邮件合并尝试打开 [文件夹名称].mdb 而不是 ACCDB 源

    我们正在尝试从 Access 中自动执行邮件合并过程 单击按钮后 VBA 将运行指定当前数据库 accdb 作为数据源并运行 SQL 具体代码如下 Set up Word Dim objWord As Object Set objWord
  • 用于 C# XNA 的 Javascript(或类似)游戏脚本

    最近我准备用 XNA C 开发另一个游戏 上次我在 XNA C 中开发游戏时 遇到了必须向游戏中添加地图和可自定义数据的问题 每次我想添加新内容或更改游戏角色的某些值或其他内容时 我都必须重建整个游戏或其他内容 这可能需要相当长的时间 有没
  • 在 GWT 中,在任何主机页标记上添加事件处理程序

    我想为任何标签添加 MouseOver 事件处理程序 举个例子 我想为旧版 HTML 页面中的每个锚点页面添加事件处理程序 继GWT指南 http code google com webtoolkit doc 1 6 DevGuideUse
  • ngmodel与Angular2中复选框的动态数组绑定

    我有一个 Angular 2 组件 其中我从数组生成复选框列表 现在我需要根据选中的复选框填充不同的数组 这应该是双向绑定 这意味着如果复选框的值已在数组中 则必须已经检查了复选框 我在 Angular 1 中使用了一个名为 checkli
  • 闪亮井板宽度

    library shiny library shinydashboard ui lt dashboardPage dashboardHeader dashboardSidebar dashboardBody wellPanel tags d
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 您可以使用关键字参数而不提供默认值吗?

    我习惯于在 Python 中使用这样的函数 方法定义 def my function arg1 None arg2 default do stuff here 如果我不供应arg1 or arg2 那么默认值None or default
  • Scrapy Spider不存储状态(持久状态)

    您好 有一个基本的蜘蛛 可以运行以获取给定域上的所有链接 我想确保它保持其状态 以便它可以从离开的位置恢复 我已按照给定的网址进行操作http doc scrapy org en latest topics jobs html http d
  • NGinx $proxy_add_x_forwarded_for 和 real_ip_header

    我在 NGinx 下有一个 web 应用程序和另一个前端负载均衡器 如下所示 x x x x IP 地址 客户端 a a a a gt LB b b b b gt NGX c c c c gt WEBAPP d d d d 这是我的 NGi
  • Typescript 函数接口重载

    我有以下代码 interface MySecondInterface a type A interface MyInterface val1 string val2 string MySecondInterface a
  • 带显示块的SPAN

    和默认有什么区别 div 元素和默认值 span 元素与display block HTML 元素的有效性和语义存在差异 否则它们是相同的 div and span两者都被定义为通用容器 在 HTML 方面没有更深层次的含义 一个默认为块显
  • 使用 Crypto++ 获取 ECDSA 签名

    我必须使用 Crypto 在变量中获取 ECDSA 签名 我在启动 SignMessage 后尝试获取它 但签名为空 我怎样才能得到它 你看过 Crypto wiki 吗 上面有很多东西椭圆曲线数字签名算法 http www cryptop
  • 自定义 Visual Studio 2008 中的位置栏

    有人成功定制了 VS 2008 的 Places Bar 吗 我从 VS 2005 进行的自定义设置并没有转移到 2008 显然 并且无论我如何处理注册表 我都无法使我的自定义位置出现在 打开 对话框中 我已经阅读并应用了相关的MS KB文
  • 从 Azure 应用服务连接到 MongoDB Atlas 集群

    我在 Azure 上有一个 Web 应用程序 它连接到 Atlas cloud mongodb com 上托管的 MongoDB 集群 我想使用 Atlas 这样我就不必关心 MongoDb 配置 问题是我的集群连接超时 我必须在我的 mo
  • 是否可以在 C# 中强制接口实现为虚拟?

    我今天遇到了一个问题 试图重写尚未声明为虚拟的接口方法的实现 在这种情况下 我无法更改接口或基本实现 而必须尝试其他方法 但我想知道是否有一种方法可以强制类使用虚拟方法实现接口 Example interface IBuilder
  • 错误:无效使用不完整类型“类 Move”/未定义对 Move::NONE 的引用

    拜托 我不知道为什么这个简单的代码被拒绝 它给了我 2 个编译错误 请帮帮我 I use 代码 块 20 03 我的编译器是GNU GCC 移动 hpp class Move public Move Move int int public
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • 保存符号方程以供以后使用?

    From here http www mathworks com help releases R2011a toolbox symbolic brvfu8o 1 html brvfxem 1 我正在尝试求解这样的符号方程组 syms x y
  • 当ScrollView滚动到底部时加载更多数据

    我有一个带有动态加载内容的滚动视图 有时可能会有很多内容 所以我想在用户滚动到底部时加载更多内容 我搜索了合适的方法 发现了两种 onScrollChanged and getScrollY 但我不知道如何将它用于我的目的 请给我一些建议
  • CUDA 中指令重放的其他原因

    这是我从 nvprof CUDA 5 5 获得的输出 Invocations Metric Name Metric Description Min Max Avg Device Tesla K40c 0 Kernel MyKernel do

随机推荐

  • 如何获取被点击元素的类?

    我不知道如何获得class单击的元素的值 当我使用下面的代码时 我得到 node 205 每次 jQuery find gt ul tabs selectedClass active select function event ui sho
  • EXC_BAD_ACCESS 当我关闭窗口时,这也是我的应用程序的委托

    我写了一个 Cocoa 应用程序 然后我得到了EXC BAD ACCESS当我关闭应用程序窗口时出错 我读到这个错误通常意味着内存问题 但我有ARC mode上 我不需要关心释放等 xCode 禁止我调用此函数并自动管理内存 错误指向行re
  • Django 单元测试缺少数据库列

    我在 Django 上创建了一个单元测试来创建用户帐户并发送验证电子邮件 用户已创建 但电子邮件发送失败 电子邮件的默认内容应该在创建用户时创建为用户中的一个字段 但由于某种原因 Django 声称 DatabaseError no suc
  • Iconv:带有 ASCII//IGNORE 的 EILSEQ,但不带有 ASCII//TRANSLIT//IGNORE

    使用 iconv 与 TRANSLIT IGNORE从 utf8 转换为 ascii 效果很好 它根据当前语言环境将不可转换的字符替换为正确的音译 在我的例子中为 de DE gt echo m p iconv f UTF8 t ASCII
  • -webkit-fill-available 有什么用?

    PIC 1 这就是我所拥有的 图1 PIC 2 这就是我需要的 图2 在pic 2中我添加了 width webkit fill available 我得到了我所期望的 但我不知道它是如何运作的 因此 您需要了解两件事 webkit fil
  • 子域约束(Rails 3)使本地服务器(瘦)如此慢

    我最近向我的 Rails 路由文件添加了子域约束 constraints subdomain gt new do devise for customers do get customers sign up gt registrations
  • UITableView reloadData 有多贵?

    我很好奇 UITableView 的 reloadData 的资源消耗有多大 我有一个应用程序 它将发出大约 10 个后续 HTTP 请求 当它获取数据 准备时 它会重新加载 tableView 随着数据集变得越来越大 它变得非常缓慢 我试
  • 无法连接到 MongoLab“身份验证失败”错误

    我是蒙戈新手 最近在 mongoLab 创建了一个帐户 我正在尝试使用以下语句连接到数据库 mongo ds039487 mongolab com 39487 webbies u
  • C# 解析无名称的Json文件

    所以 Json 文件的一部分是这样的 number 23 name LJames lt look at this line Gender Male 我正在尝试解析它 只要名称字段存在 名称与值不匹配 DataContractJsonSeri
  • 在 R Ubuntu 中安装主题模型时出错

    我在安装时遇到错误topicmodels封装在R 跑步时install packages topicmodels dependencies TRUE 以下是我收到的最后几行 请帮忙 我的R版本是3 1 3 g I usr share R i
  • 使用雷达/极坐标图来描述各个数据点

    这是继我之前的帖子之后 如何在ggplot2中测量多边形的面积 https stackoverflow com questions 47644156 how to measure the area of a polygon in ggplo
  • 如何验证GPU的使用情况?

    如何验证 CNTK 是否正在使用 GPU 我已在我的计算机上安装了 CNTK 2 0 beta7 0 Windows 64bit GPU 1bit SGD 二进制文件 但是 当我尝试从 Python 运行它时 from cntk devic
  • C++ - 自动返回引用和非引用类型

    当编写函数时auto我们可以使用的返回类型constexpr if返回不同类型 auto myfunc constexpr if someBool type1 first something return first else type2
  • 匹配后替换行

    给定这个文件 cat foo txt AAA 111 BBB 222 CCC 333 我想替换之后的第一行BBB with 999 我想出了这个命令 awk BBB f 1 print next f 1 999 f 0 1 foo txt
  • Stacktrace Java Eclipse 中的未知来源

    我有一个非常烦人的问题 当在 Eclipse 中从源代码中导出 jar 文件时 我不会在堆栈跟踪中获得有关发生错误的源代码和行号的信息 我已经检查了 ecplise 中项目的编译器设置 并且设置了类文件生成部分中的所有选项 我正在为 Min
  • 如何使用 VB 6.0 生成格式良好的 XML 文件?

    我正在开发 Visual Basic 6 0 项目 需要生成一个格式良好的 XML 文件 其如下所示
  • RESTEasy - 使用重复的缓存控制进行响应 - Wildfly10

    我有一个带有图像的 GET 响应 GET Path id thumbnail public Response readThumbnailById PathParam id String id QueryParam serviceContex
  • 如何删除没有标签的Docker镜像?

    我使用 docker 已有 5 个月了 从来没有遇到过这个问题 我有 2 个具有相同 ID 的图像 因此我想删除我知道它已被弃用的图像 问题是它没有 ID 当我尝试这样做时 dk rmi f gitlab lab 5005 xs mgmt
  • Scala:如何使用默认值初始化对象

    我认为用一个例子可以更好地解释这一点 我有以下案例类 case class Person name String no name surname String no surname 我想创建一个通用函数来填充它 例如 一条 json 消息
  • 具有配置的类库中的 Entity Framework 7 迁移脚手架

    尝试将迁移添加到 ASP NET 5 类库中的 EF7 模型 跑步时dnx ef migration add mymigration失败并产生不同的结果 具体取决于我运行它的项目 如果我在主项目的文件夹中运行它 它无法找到DbContext