我是Entity Framework Core的新手,因为我目前正在从EF6迁移过来。我们使用数据库优先模型。
我创建了一个.Net Standard类库,在其中导入了EF Core,并在VS中使用了scaffolding命令来导入我的一张表作为测试-可以正常工作。
我们有几个不同的副本数据库,这些副本数据库用于地理冗余和报告目的,但是都具有相同的模型。
我设置了不同的连接选项,有点类似于本文Using Entity Framework Core migrations for class library project的答案中的第2点,因此我们可以支持到不同数据库的连接。
现在,我想添加其余的表。我已经看到了关于Migrations的提及,但这似乎是针对代码优先模型的。
然后,我尝试在脚手架上使用“ -Force”命令,该命令确实导入了另一个表,但是我失去了对多数据库的支持。
在EF6中,我在Context.tt
文件中拥有此逻辑,因此当我从数据库中检索更新时,它将保留我拥有的自定义连接选项。
是否有办法在EF Core中复制此文件或缺少什么?
同样,对于像表上的新列这样简单的事情,我还应该运行相同的命令吗?
预先感谢
大卫
*更新*
我最终使用了EF Core Power Tools,它是一个很棒的软件包,可以完全控制模型,就像以前的context.tt文件一样。
对于未来的任何人,我都对EF Core Power Tools中的Handlebars模板进行了反向工程和使用。我传递了在应用程序启动时使用的3个连接字符串,然后可以设置可选的布尔值来指示要使用的连接-对于重新开始的人来说,枚举可能更优雅,但这使我们更容易迁移。 在DbConstructor.hbs中,我将其更新为:
{{spaces 8}}public {{class}}(bool ReadOnlyDatabase = false, bool ReportsDatabase = false) : base()
{{spaces 8}}{
if (ReadOnlyDatabase)
_connectionString = ReadOnlyContext;
else if (ReportsDatabase)
_connectionString = ReportsContext;
else
_connectionString = ReadWriteContext;
{{spaces 7}} }
DbContext.hbs文件为:
{{> dbimports}}
namespace {{namespace}}
{
public partial class {{class}} : DbContext
{
public static string ReadWriteContext = "";
public static string ReadOnlyContext = "";
public static string ReportsContext = "";
private readonly string _connectionString;
{{{> dbsets}}}
{{#if entity-type-errors}}
{{#each entity-type-errors}}
{{spaces 8}}{{{entity-type-error}}}
{{/each}}
{{/if}}
{{{> dbconstructor}}}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_connectionString);
}
{{{on-model-creating}}}
}
}
答案 0 :(得分:1)
为构造函数提供一个DbContextOptions:
guard let arrayPhoto = jsonRaw as? [Photo] else ..
也许EF核心电动工具可以为您提供帮助? (我是作者)
答案 1 :(得分:1)
您需要发布更多代码,以便我们了解发生了什么。听起来好像您正在自定义生成的上下文类。您将在每次使用脚手架的操作中将其覆盖,并且如您所述,迁移支持可用于通过模型更改来驱动db Schema更新。即首先是代码。
db的第一个脚手架方法似乎是在编写该脚手架的期望下进行的,其后模型和上下文将被手动更新。 我们有一个工作流程,其中涉及重新搭建DbContext以响应数据库架构更新,因此需要做三件事:
现在,我不建议使用扩展方法来初始化不同的连接字符串。
我确定那些人肯定已经来自config了,如果不是,那是您在制作一个控制台而不是asp.net核心应用程序,它使配置驱动的DbContexts的创建变得非常容易,我真的建议学习至少使用Microsoft。 Extensions.Configuration,可通过appSettings配置DbContext实例。
我不能直接使用DbOptionsBuilder分享初始化DBContext的代码示例,因为我的罪魁祸首是我总是在Asp.net Core中获得DI来为我做。