加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 实体框架种子无效

发布时间:2020-12-15 23:25:14 所属栏目:百科 来源:网络整理
导读:我在我的web.config上有这个. add name="AppDataContext" connectionString="Data Source=(LocalDb)v11.0;AttachDbFilename=|DataDirectory|AppDatabase.mdf;Initial Catalog=AppDatabase;Integrated Security=True" providerName="System.Data.SqlClient"
我在我的web.config上有这个.

<add name="AppDataContext" connectionString="Data Source=(LocalDb)v11.0;AttachDbFilename=|DataDirectory|AppDatabase.mdf;Initial Catalog=AppDatabase;Integrated Security=True" providerName="System.Data.SqlClient" />

Global.asax APplication Start

Database.SetInitializer<AppDataContext>(new AppDataContextInitializer());

AppDataContextInitializer.cs

public class AppDataContextInitializer : System.Data.Entity.CreateDatabaseIfNotExists<AppDataContext>
    {
        protected override void Seed(AppDataContext context)
        {
            #region Seed Modules
            context.ModuleList.Add(new Module() { Id = 1,ModuleName = "Contabilidad",FontAwesomeClass = "ambulance" });
            context.ModuleList.Add(new Module() { Id = 2,ModuleName = "Recursos Humanos",FontAwesomeClass = "heartbeat" });
            context.ModuleList.Add(new Module() { Id = 3,ModuleName = "Inventario",FontAwesomeClass = "medkit" }); 
            #endregion


            base.Seed(context);
        }
    }

AppDataContext.cs

public class AppDataContext : DbContext
    {

        public AppDataContext(): base("AppDataContext")
        {
        }

        public DbSet<Module> ModuleList { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }
    }

和module.cs

public class Module
    {
        [Key]
        public int Id { get; set; }
        public string ModuleName { get; set; }
        public string FontAwesomeClass { get; set; }
    }

但是我的数据库没有创建,我错过了什么?

更新1,我在global.asax上添加了这个

AppInitializacionHandler.Initialize();

我创建了这个类:

public class AppInitializacionHandler
    {
        public static void Initialize()
        {
            Database.SetInitializer(new AppDataContextInitializer()); //if u want to use your initializer
            using (var db = new AppDataContext())
            {
                db.Database.Initialize(true);
            }
        }
    }

和初始化种子一样

已创建数据库但未添加ROWS.

解决方法

如果您不访问数据库,则永远不会调用初始化程序.如果要在应用程序启动时调用Global.asax中的Initialize方法,请创建数据库:

context.Database.Initialize(true)();

更新1:

问题是您在不同的数据库实例中设置初始化程序,请尝试以下操作:

using (var db = new AppDataContext())
{
   db.Database.SetInitializer(new AppDataContextInitializer());
   db.Database.Initialize(true);
}

或者在DbContext构造函数上设置Initializer:

public AppDataContext()
 {
    Database.SetInitializer(new AppDataContextInitializer());
 }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读