我有一個ASP.NET-MVC
應用程序啓用Migration
和SimpleMemberShipProvider
配置爲使用我的數據庫與一些額外的表/字段。數據庫初始化策略代碼第一
我的問題是,在哪裏把我的數據庫初始化?因爲我仍然在開發它,所以我可以放棄數據庫/表和數據並重新創建它。
我已經把它放在configuration.cs文件中,但我不確定這是否是數據庫初始值設定項的地方。
namespace CFContext.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using WebMatrix.WebData;
using System.Web.Security;
using System.Collections.Generic;
internal sealed class Configuration : DbMigrationsConfiguration<DataContext>
{
public Configuration()
{
Database.SetInitializer(new DropCreateDatabaseAlways<DataContext>());
//Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DataContext>());
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
}
protected override void Seed(DataContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data. E.g.
//
// context.People.AddOrUpdate(
// p => p.FullName,
// new Person { FullName = "Andrew Peters" },
// new Person { FullName = "Brice Lambson" },
// new Person { FullName = "Rowan Miller" }
// );
//
SeedMembership(context);
}
private void SeedMembership(DataContext context)
{
WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true);
var roles = (SimpleRoleProvider)Roles.Provider;
var membership = (SimpleMembershipProvider)System.Web.Security.Membership.Provider;
if (!roles.RoleExists("Administrator"))
roles.CreateRole("Administrator");
if (membership.GetUser("Username0", false) == null)
{
}
}
}
}
嗨,這裏令人困惑的部分是,如果你啓用遷移,configuration.cs文件已經有一個保護覆蓋無效種子(上下文上下文)方法。可以在多個地方使用嗎? – Yustme 2013-05-14 14:20:36
你應該只設置一個初始化策略,所以CreateDatabaseIfNotExists不應該在你的。只要確保你設置了初始化策略來使用你的Migrations設置。有兩種不同的類型不應該影響它。 –
2013-05-14 15:10:23
我的意思是隻有Seed()方法,它在啓用遷移時也位於configuration.cs中。我會有Seed()方法兩次。 – Yustme 2013-05-14 16:14:00