如何使用实体框架为数据库提供静态数据?

Mat*_*zen 4 .net c# entity-framework entity-framework-4.3

如何在实体框架中创建(种子)大量静态数据?静态数据是指位于数据库中但只存在一次的数据。

例如,在我的数据库中,我有一个 CountrySet,其中包含全球所有国家/地区。我希望这些国家/地区始终存在,但事实是,每次我清除数据库并重新创建以进行新部署时,所有数据都会丢失。

在我的应用程序启动时创建它(如果它尚未创建)似乎对时间非常敏感。

我能在这里做什么?

Nat*_*man 5

首先,让我问这个:

Seed当您设置自己的 时,您是否熟悉可以访问的功能Initializer

例子:

在你的主函数中写下这样的东西:

System.Data.Entity.Database.SetInitializer(new SystemContext.SystemInitializer());
Run Code Online (Sandbox Code Playgroud)

SystemContext你的DbContext班级在哪里。

在那个课程中,你应该有这样的东西:

public class SystemContext : DbContext
    {
        public DbSet<Stock> Stocks { get; set; }
        public DbSet<RawDayValues> StockRawValues { get; set; }

        public SystemContext()
            : base("Server=localhost;Database=test;Trusted_Connection=True;") 
        { }

        public class SystemInitializer : DropCreateDatabaseIfModelChanges<SystemContext>
        {
            #region SEED
            // This is what you're looking for!
            protected override void Seed(SystemContext context)
            {
                try
                {
                    var stock = new Stock() { Symbol = "TEST" };
                    context.Stocks.Add(stock);
                    context.SaveChanges();
                }
                catch (Exception ex) { Console.Error.WriteLine(ex.Message); }
                base.Seed(context);
            }

            #endregion
        }
    }
Run Code Online (Sandbox Code Playgroud)

这只是我手头的一个项目中的一些模板代码。

如果您确实每次都重新创建数据库,那么我不知道有任何其他方法可以在不“手动”添加所有数据的情况下“播种”数据库。

另一方面,如果您打算在每次想要更改数据库中的详细信息时除删除数据库外做其他事情,您可能必须手动编写函数,根据某种逻辑清除所有新数据。

我希望这回答了你的问题 :)

还:您既没有在问题中指定,也没有使用您所谈论的技术的标签。我假设它是。如果不是这种情况,请重新标记/指定。

祝你今天过得愉快 :)