Lui*_*cia 3 c# asp.net asp.net-mvc entity-framework asp.net-mvc-5
我在我的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" />
Run Code Online (Sandbox Code Playgroud)
Global.asax APplication Start
Database.SetInitializer<AppDataContext>(new AppDataContextInitializer());
Run Code Online (Sandbox Code Playgroud)
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);
}
}
Run Code Online (Sandbox Code Playgroud)
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>();
}
}
Run Code Online (Sandbox Code Playgroud)
和module.cs
public class Module
{
[Key]
public int Id { get; set; }
public string ModuleName { get; set; }
public string FontAwesomeClass { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
但是我的数据库没有创建,我错过了什么?
更新1,我在global.asax上添加了这个
AppInitializacionHandler.Initialize();
Run Code Online (Sandbox Code Playgroud)
我创建了这个类:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
和初始化程序种子一样
已创建数据库但未添加ROWS.
如果您不访问数据库,则永远不会调用初始化程序.如果要在应用程序开始调用InitializeGlobal.asax中的方法时创建数据库:
context.Database.Initialize(true)();
Run Code Online (Sandbox Code Playgroud)
问题是你在不同的Database实例中设置初始化程序,试试这个:
using (var db = new AppDataContext())
{
db.Database.SetInitializer(new AppDataContextInitializer());
db.Database.Initialize(true);
}
Run Code Online (Sandbox Code Playgroud)
或者在DbContext构造函数上设置Initializer :
public AppDataContext()
{
Database.SetInitializer(new AppDataContextInitializer());
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5758 次 |
| 最近记录: |