1

私はEntityFrameworkのコードファーストを使用しています。

DataBaseName-SQLServerでデータベースを作成したい。

web.config

<configuration>
  <connectionStrings>
    <add name="DataContext" 
         providerName="System.Data.SqlClient" 
         connectionString="Data Source=USER\SQLEXPRESS;Initial Catalog=DataBaseName;Integrated Security=True;Pooling=False;User Instance = False" />

global.asax

 protected override void OnApplicationStarted()
 {
     base.OnApplicationStarted();

     Database.SetInitializer(new DataContextInitializer());
 }

DataContextInitializer

namespace CodeFirstMembershipSharp
{
    public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
    {
        protected override void Seed(DataContext context)
        {
            MembershipCreateStatus Status;
            Membership.CreateUser("Demo", "123456", null, null, null, true, out Status);
            Roles.CreateRole("Admin");
            Roles.AddUserToRole("Demo", "Admin");
        }
    }
}

DataContext

public class DataContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Bid>()
            .HasRequired(a => a.Auction)
            .WithMany()
            .HasForeignKey(x => x.AuctionId).WillCascadeOnDelete(false);

        modelBuilder.Entity<Bid>()
           .HasRequired(a => a.User)
           .WithMany()
           .HasForeignKey(x => x.UserId).WillCascadeOnDelete(false);
    }

    public DbSet<User> Users { get; set; }
    public DbSet<Role> Roles { get; set; }
    public DbSet<Auction> Auctions { get; set; }
    public DbSet<Page> Pages { get; set; }
    public DbSet<Bid> Bids { get; set; }
}

ただし、データベースは作成されません。何を書くのを忘れましたか?

4

2 に答える 2

1

Database.SetInitializer イニシャライザを設定しますが、初期化は実行しません。Database.SetInitializer追加する必要がある後:

using (var context = new DataContext())
{
    context.Database.Initialize(false);
}
于 2012-06-30T11:20:52.660 に答える
0

シードメソッドに新しいデータを追加しているのがわかりません。entityframeworkがデータベースを作成してデータを保存するように、データをdatacontextに追加する必要があると思います。次のようにしてみてください。

namespace CodeFirstMembershipSharp
{
    public class DataContextInitializer : DropCreateDatabaseAlways<DataContext>
    {
        protected override void Seed(DataContext context)
        {
            context.Users.Add(new User{name = "Demo", password = "123456"});
            context.Roles.Add(New Role("Admin"));
        }
    }
}
于 2012-06-30T11:30:34.770 に答える