从导出中馈送数据库 MSSQL

Feed database MSSQL from export

提问人:Raso 提问时间:10/24/2023 最后编辑:Joel CoehoornRaso 更新时间:10/25/2023 访问量:42

问:

我正在寻找一种方法来喂养我的数据库。我使用 Microsoft SQL Server Management Studio 浏览数据库。我在那里的许多桌子上有很多行。

我想找到一种快速导出此数据库的方法,并编写一个脚本,该脚本将在我的 C# 应用程序上提供数据库。我经常不得不删除我的数据库并使用实体框架迁移创建它,而且每次数据库都是空的。我知道仅从MSSQL中做到这一点很容易,但是我想要一种自动化的代码方式,以便当您启动应用程序时,它会馈送数据库。

数据库非常大,实体非常复杂,它们之间有很多关系,所以我不想单独编写一个包含所有内容的 json 文件。希望有一个工具可以做到这一点!

C# .NET SQL Server 数据库 实体框架

评论

1赞 Joel Coehoorn 10/24/2023
通常有两种处理方式。首先(首选),如果您在现有数据库上将迁移构建为 UPDATE/ALTER/INSERT,而不是像现在这样构建 CREATE/INSERT。第二种:在开发平台中保留一个参考数据库,并从引用数据库中插入数据。按照您的要求,导出数据以通过客户端代码加载要慢得多,需要构建和维护的工作量要大得多,而且更脆弱。

答:

1赞 Mark Vermulst 10/24/2023 #1

我最好的建议是编写一个播种数据的播种机。从技术上讲,您可以让它从 MSSQL 数据库中提取数据,但就我个人而言,我宁愿只编写种子播种器,这些种子自己播种数据,而不需要依赖其他服务。

1赞 hakim00 10/25/2023 #2

有多种方法可以实现此目的,但如前所述,您应该为数据库设定种子。您可以为 编写扩展类。ModelBuilder

public static class ModelBuilderExtensions
{
    public static void Seed(this ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyEntity>().HasData(
            new MyEntity
            {
                Id = Guid.NewGuid(),
                Name = "SomeString",
                SomeValue = 3,
                IsSomething = true
            }
        );
    }
}

在上下文类中,调用该方法来填充数据库。Seed

public class MyContext: DbContext
{
    public DbSet<MyEntity> MyEntities{ get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Seed();
    }
}

您可以在此处阅读有关数据种子的更多信息。