标签: entity-framework-migrations

Entity Framework Core OwnsOne 创建单独的表,而不是按预期将属性添加到同一表

我认为 Entity Framework Core 拥有的类型默认会添加到与其所有者相同的表中。但我在迁移中没有看到这一点。

有人会告诉我这里吗?

有没有办法通过将 Name 属性直接添加到 Person 表来获得所需的迁移?

public class Person
{
    public Name Name { get; set; }
}

public class Name
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class PersonConfiguration : IEntityTypeConfiguration<Person>
{
    public void Configure(EntityTypeBuilder<Person> person)
    {
          person.OwnsOne(p => p.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

dotnet ef migrations add DidNotSeeThatComing 结果是

public partial class DidNotSeeThatComing : Migration
{
    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "Name", …
Run Code Online (Sandbox Code Playgroud)

entity-framework-core ef-core-2.1 owned-types entity-framework-migrations

5
推荐指数
1
解决办法
2992
查看次数

EF 迁移:截断表

我正在开发一个使用实体框架和代码优先的现有项目。我需要在迁移运行之前运行一些 SQL,但收到有关外键约束的错误,因此我需要从表中删除现有数据。我可以在不使用 DbMigration.DropTable() 删除表的情况下执行此操作吗?

c# entity-framework entity-framework-migrations

5
推荐指数
1
解决办法
5328
查看次数

无法在 .Net Standard 2.1 项目中添加 EF 6.4 迁移

我们正处于将大型解决方案移植到 .Net Core(从 4.7.2 开始)的最后阶段,但我们还没有准备好迁移到 Entity Framework Core,因为我们使用每个类型的表层次结构,等等。我们使用 EF 代码优先。因此,包含 DbContext 和 EF 迁移的项目现在正在运行 .netstandard2.1 并引用 EF 6.4(从 v6.3 开始,它显然支持 .net core)。据我了解,EF 工具从 v6.2 更改为 v6.4,因此我们创建 EF 迁移的传统方法现在会在程序包管理器控制台中导致以下错误:

添加迁移测试-项目数据

项目“数据”目标框架“.NETStandard”。实体框架包管理器控制台工具不支持此框架。

经过一番调查,我发现了这个,这表明您需要使用 .Net Core 程序集作为虚拟启动项目。创建 .netcore 3.1 控制台应用程序项目(称为 Data_Startup,它引用 Data 项目)并稍微修改我的命令后,我现在收到以下错误:

dotnet ef 迁移添加 TEST --project Data --startup-project Data_Startup -c CustomContext

未找到名为“CustomContext”的 DbContext。

这看起来至少是在尝试迁移,但我现在陷入困境。我尝试使用命名空间完全限定 DbContext 并将 DBContext 类作为“链接文件”添加到新的虚拟项目中,但我遇到了相同的错误。

我还尝试使用 EF 6.4 工具: dotnet C:\Users\xxxx.nuget\packages\entityframework\6.4.0\tools\netcoreapp3.0\any\ef6.dll" 迁移添加 TEST -- assembly Data

您的目标项目“数据”不引用EntityFramework。实体框架核心工具需要此包才能正常工作。确保您的目标项目正确,安装包,然后重试。

...尽管它肯定安装在数据项目中!

我究竟做错了什么?我实际上需要使用哪个工具?这个项目配置是否可能?

c# entity-framework entity-framework-6 entity-framework-migrations

5
推荐指数
2
解决办法
2421
查看次数

EF Core Data Seeding(模型构建器上的 HasData 方法)未插入 Identity 列的数据

我正在为具有 Id(身份)列的实体调用 HasData 方法(见下文),但迁移第一次运行时没有数据插入到表中。

当 TestObject 模型未使用 Id(身份)列作为主键时,首次运行迁移时将按预期插入数据。

EF Core 是否能够为 Identity 列插入数据?

modelBuilder.Entity<TestObject>().HasData(
            new TestObject
            {
                Id = 1,
                TestValue = "Test 1"
            }
Run Code Online (Sandbox Code Playgroud)

entity-framework-core entity-framework-migrations

5
推荐指数
1
解决办法
9438
查看次数

扩展 Identity Server 4 的配置和操作数据上下文

我想自定义 Identity Server 4 的配置和操作数据上下文。

我让您查看配置存储的代码,因为代码非常相似。

这是我的定制商店:

internal class MyConfigurationDbContext : ConfigurationDbContext
{
    public MyConfigurationDbContext(DbContextOptions<ConfigurationDbContext> options, ConfigurationStoreOptions storeOptions)
        : base(options, storeOptions)
    {
    }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);

        modelBuilder.HasDefaultSchema("configuration");
    }
}
Run Code Online (Sandbox Code Playgroud)

这里我有第一个疑问。我认为构造函数的签名应该是

public MyConfigurationDbContext(DbContextOptions<MyConfigurationDbContext> options, ConfigurationStoreOptions storeOptions)
Run Code Online (Sandbox Code Playgroud)

但在这种情况下它无法DbContextOptions<MyConfigurationDbContext>转换DbContextOptions<ConfigurationDbContext>

好吧,在我的启动中我有这样的代码:

builder.AddConfigurationStore<MyConfigurationDbContext>(options =>
{
    options.ConfigureDbContext = b => b.UseSqlServer(connectionString,
        sql => sql.MigrationsAssembly(MIGRATION_ASSEMBLY));
});
Run Code Online (Sandbox Code Playgroud)

然后,我尝试生成第一次迁移:

Add-Migration InitialIdentityServerPersistedGrantDbMigration -Context MyConfigurationDbContext -OutputDir Data/Migrations/IdentityServer/PersistedGrantDb
Run Code Online (Sandbox Code Playgroud)

但在这种情况下,我收到此错误:

Unable to resolve service for type 'Microsoft.EntityFrameworkCore.DbContextOptions`1[IdentityServer4.EntityFramework.DbContexts.ConfigurationDbContext]' while attempting to activate 'My.IdentityServer.DataLayer.Repository.Contexts.MyConfigurationDbContext'.
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

谢谢

dbcontext entity-framework-core identityserver4 entity-framework-migrations

5
推荐指数
1
解决办法
898
查看次数

添加Entity Framework核心迁移而不使用其他项目

当我使用 Entity Framework Core 创建 ORM 模型项目时,遇到迁移问题。我通常从数据层开始我的项目,然后生成我的数据模型。之后,我独立地添加迁移(从其他项目)。如何仅使用命令添加首次迁移,而不在其他项目上配置迁移或使其成为可执行项目(如控制台)?

c# entity-framework entity-framework-core entity-framework-migrations

5
推荐指数
1
解决办法
4257
查看次数

Azure 生产环境中数据库迁移的最佳实践

我正在开发一个由 PostgreSQL 数据库支持的 ASP.Net Core 应用程序。

到目前为止,我的应用程序托管在我的个人 VPS 上,但我想迁移到 Azure 上,并且我不知道如何处理那里的数据库迁移。

我的数据库方案由 Entity Framework Core 处理并与 POCO 映射。如文档中所述,当我想要更改 SQL 方案时,我会更新 POCO,通过命令创建迁移 C# 文件dotnet ef migration create,并Database.Migrate()在运行时通过命令应用它们。这是通过在运行时应用迁移定义的,但是如下所述:

虽然这种方法对于本地开发和迁移测试很有成效,但不适合管理生产数据库。

有一段关于使用SQL 脚本,但没有真正涉及“如何在 CI/CD 管道中应用迁移脚本”。

当然,我查看了Microsoft文档上关于如何在Azure上部署ASP.Net Core应用程序+ SQL DB的官方教程,但是没有任何关于DB迁移的内容(生产DB的迁移是通过CLI从本地应用的)电脑 ...)。

Azure 上没有特定的服务允许我们应用数据库迁移吗?

我知道这个问题既不特定于 Azure,也不特定于 .NET 应用程序,但我担心我的问题太“广泛”。

此外,当在 Google 上查找“数据库迁移”时,大多数结果都是关于从给定数据库到另一个数据库(或从一个供应商到另一个供应商)的迁移,这是不一样的。

非常感谢

c# continuous-integration azure asp.net-core entity-framework-migrations

5
推荐指数
1
解决办法
1604
查看次数

如何从迁移列表中删除已删除的 typeorm 迁移文件

运行typeorm migration:generate -n <name>,但生成的迁移文件由于某些问题而未运行,删除了生成的文件并创建了另一个迁移文件并尝试运行迁移,但它被我删除的同一迁移文件阻止。我跑去typeorm migration:show获取迁移列表,看到了已删除的迁移文件,这阻止了我的其他迁移,有人可以帮助我如何解决这个问题。

更多详细信息:我的数据库中存储了迁移信息,但没有删除的迁移文件。不知道 typeorm 从哪里提取文件。缓存已禁用

typeorm entity-framework-migrations

5
推荐指数
1
解决办法
4965
查看次数

将 EF Core 迁移添加到现有数据库,同时仍支持从头开始创建数据库

去年,我使用 .Net Core 和 EF Core 重写了一个遗留应用程序,但由于其他限制因素,当时选择不添加迁移。终于到了新应用程序可以作为模式更改的“单一事实来源”运行的时候了,但我对前进的最佳方式有点茫然。

我的最终目标是进行迁移,使整个现有数据库从无到有(减去非查找表中包含的数据)。不幸的是,到目前为止我想出的最可行的解决方案是针对新的空白数据库构建迁移。然后,一旦创建了与当前数据库状态匹配的初始迁移,我就可以将__EFMigrationsHistory新创建​​的数据库复制到旧数据库。

或者,我可以构建一个空白的初始迁移,并且可以尝试在该迁移中添加逻辑,以便从 SQL 文件创建数据库(如果数据库不存在)。


这两种解决方案似乎都特别“好”。除了诸如 之类的工具之外FluentMigrator,是否有任何以 EF Core 为中心的方法可以简化为需要重新创建测试的现有数据库创建迁移的过程?

.net c# entity-framework .net-core entity-framework-migrations

5
推荐指数
1
解决办法
2578
查看次数

仅当 Entity Framework Core 种子数据不存在时

实体框架迁移提供了一种通过在实体类型上使用 .HasData() 来创建数据和创建表的方法。这将转换为迁移,并调用 MigrationBuilder.InsertData 以在迁移运行时插入数据。当表中的数据仅由迁移提供时,它可以正常工作。但是,当表中已存在种子数据时,迁移会失败并出现重复键错误,因为它尝试插入的键已经存在。

  • 我知道我可以编写一个数据库初始化方法,仅使用实体框架并在迁移之外提供数据。

  • 我还知道我可以运行本机 SQL 语句,包括检查数据是否存在,并仅在这种情况下将其插入作为迁移的一部分。

但令我有点惊讶的是,这个(恕我直言,不是那么奇特)功能并不存在。

或者是否有一些我可能遗漏的东西,并且有一种方法可以配置实体以仅在表中没有数据时提供种子数据?(这就是这个问题的目的)

更新:我们正在使用实体框架 3.1.22

seeding entity-framework-core entity-framework-migrations

5
推荐指数
0
解决办法
4413
查看次数