2012-06-30 2 views
1

Я использую сначала код Entity Framework.Почему база данных не создана?

DataBaseName - Я хочу создать базу данных на SQL Server.

В 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; } 
} 

Но база данных не создана. Что я забыл написать?

ответ

1

Database.SetInitializerнаборы инициализатор но не запустить инициализации. После Database.SetInitializer вам нужно добавить:

using (var context = new DataContext()) 
{ 
    context.Database.Initialize(false); 
} 
+0

Я получаю ошибку один или несколько ошибок проверки в процессе генерации модели были обнаружены: System.Data.Edm.EdmAssociationConstraint:: типы всех свойств в зависимой роли реляционного ограничения должны быть так же, как соответствующие типы свойств в главной роли. Тип свойства «AuctionId» на объекте «Bid» не соответствует типу свойства «UserId» для объекта «Пользователь» в ссылочном ограничении «Bid_Auction». – Mediator

+2

@simplydenis: Исключение является хорошим знаком, потому что это доказывает, что инициализация базы данных запущена :) Проблема не имеет ничего общего с вашим исходным вопросом. Исключение говорит, что существует несоответствие типов между свойствами ключа и внешнего ключа, но я не могу сказать точно, не видя вовлеченных классов 'User',' Bid', 'Auction' и т. Д. – Slauma

0

Я не вижу, что вы добавлять новые данные в методе семян, я думаю, что вам нужно, чтобы добавить их к DataContext, так что entityframework будет идти создать БД и сохранить данные, попробовать что-то вроде ниже

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")); 
     } 
    } 
} 
+0

не включен в семена – Mediator

Смежные вопросы