EF Core Seeding 机制不插入数据

Posted

技术标签:

【中文标题】EF Core Seeding 机制不插入数据【英文标题】:EF Core Seeding mechanism doesn't insert data 【发布时间】:2020-05-19 02:41:52 【问题描述】:

我正在尝试使用 EntityFramework、In-Memory DB 和 DB 播种器创建一个 WCF 应用程序。但我被困住了。我不知道为什么这对 C# 来说是如此令人难以置信的麻烦。在 Java 中,这将是一个 10 分钟的任务,并且这个东西会运行。无论如何,这是我的 DBContext 代码:

public class AppDBContext : DbContext
    
        private static readonly DbContextOptions options = new DbContextOptionsBuilder<AppDBContext>().UseInMemoryDatabase("INMEMO-DB").Options;

        public AppDBContext() : base(options)
        
        

        public DbSet<Notification> Notifications  get; set; 

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        
            modelBuilder.Entity<Notification>().HasData(
                new Notification
                
                    Id = 1
                ,

                new Notification
                
                    Id = 2
                ,

                new Notification
                
                    Id = 3
                
            );

            base.OnModelCreating(modelBuilder);
        
    

如您所见,我正在使用OnModelCreating 方法将数据播种到我的数据库中。该方法被调用,但不会插入任何数据。我做错了什么?

我对这个 C# 东西已经没有耐心了..

【问题讨论】:

你需要调用Database.EnsureCreated()方法。 docs.microsoft.com/en-us/ef/core/modeling/data-seeding 是的,很好,就是这样......发布它作为答案,我会接受它。 【参考方案1】:

HasData 方法仅将实体配置为具有种子数据。

要真正播种数据库,您需要调用

Database.EnsureCreated();

请注意,这仅适用于数据库尚不存在(作为内存数据库)的情况,因为 EnsureCreated 否则不会执行任何操作。

对于现有数据库,您需要创建和应用迁移。

供参考:Data Seeding

【讨论】:

以上是关于EF Core Seeding 机制不插入数据的主要内容,如果未能解决你的问题,请参考以下文章

ef core 子对象集合插入顺序

如何避免在 EF Core 中插入后选择插入的实体?

EF Core - 在数据库中按顺序插入记录,PK 上没有标识

如何使EF Core不插入MySql中自增长的主键(踩坑实录)

插入嵌套对象 EF Core 5

.net ef core 检查是不是插入成功