Ale*_*lec 62 frameworks entity entity-framework code-first asp.net-mvc-3
数据库已成功创建(与表一样)但未加种.我花了几个小时阅读了大量文章但却未能得到它.有什么建议?
另外,是否可以在客户端中没有引用我的DatabaseContext的情况下调用初始化程序?
我已经包含了我能想到的所有相关代码.如果有任何其他方面的帮助,请告诉我.
我试过的事情:
编辑:非常奇怪的是它曾经工作过一次,但我不知道它是如何或为什么再次破坏.我假设连接字符串,但谁知道.
DatabaseInitializer.cs
public class DatabaseInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seeding data here
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
DatabaseContext.cs
public class DatabaseContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder mb)
{
// Random mapping code
}
public DbSet<Entity1> Entities1 { get; set; }
public DbSet<Entity2> Entities2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Global.asax.cs - Application_Start()
protected void Application_Start()
{
Database.SetInitializer<DatabaseContext>(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
客户端web.config
<connectionStrings>
<add name="DatabaseContext" connectionString="data source=.\SQLEXPRESS;Database=Database;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
为了记录,我在这里分享我的解决方案.无论如何,浏览所有评论都会很痛苦.最后,我将DatabaseInitializer和DatabaseContext放在不同的类中.我真的不明白,虽然这些微小的变化修复了它,但在这里它是.
DatabaseInitializer.cs
public class DatabaseInitializer : CreateDatabaseIfNotExists<DatabaseContext>
{
protected override void Seed(DatabaseContext context)
{
// Seed code here
}
}
Run Code Online (Sandbox Code Playgroud)
DatabaseContext.cs
public class DatabaseContext : DbContext
{
public DatabaseContext() : base("MyDatabase") { }
protected override void OnModelCreating(DbModelBuilder mb)
{
// Code here
}
public DbSet<Entity> Entities { get; set; }
// Other DbSets
}
Run Code Online (Sandbox Code Playgroud)
Global.asax.cs - Application_Start()
protected void Application_Start()
{
Database.SetInitializer(new DatabaseInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
Run Code Online (Sandbox Code Playgroud)
Jim*_*elo 37
这就是我的DbContext类看起来像什么,它们播种得很好:
public class MyDbContext : DbContext
{
public DbSet<MyClass> MyClasses { get; set; }
protected override void OnModelCreating (DbModelBuilder modelBuilder)
{
base.OnModelCreating (modelBuilder);
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention> ();
// Add any configuration or mapping stuff here
}
public void Seed (MyDbContext Context)
{
#if DEBUG
// Create my debug (testing) objects here
var TestMyClass = new MyClass () { ... };
Context.MyClasses.Add (TestMyClass);
#endif
// Normal seeding goes here
Context.SaveChanges ();
}
public class DropCreateIfChangeInitializer : DropCreateDatabaseIfModelChanges<MyDbContext>
{
protected override void Seed (MyDbContext context)
{
context.Seed (context);
base.Seed (context);
}
}
public class CreateInitializer : CreateDatabaseIfNotExists<MyDbContext>
{
protected override void Seed (MyDbContext context)
{
context.Seed (context);
base.Seed (context);
}
}
static MyDbContext ()
{
#if DEBUG
Database.SetInitializer<MyDbContext> (new DropCreateIfChangeInitializer ());
#else
Database.SetInitializer<MyDbContext> (new CreateInitializer ());
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用过这种模式几次,它对我来说非常好.
use*_*352 10
Seed即使正确调用Database.SetInitializerin 也没有调用我的方法Application_Start......原因很简单:如果你还没有任何实际使用数据库上下文的代码,可能根本就没有调用初始化程序.
这是我悲伤的小故事.
一,经验教训:
所以,为了避免悲伤:
现在,悲伤:
| 归档时间: |
|
| 查看次数: |
68168 次 |
| 最近记录: |