SORU
10 HAZİRAN 2011, Cuma


Nasıl tohum Varlık Çerçevesi CodeFirst kullanarak benim veritabanına alabilir miyim?

Veritabanı başarıyla tabloları gibi) oluşturulur ama seribaşı değil. Birkaç saat geçirdim ve makaleler ton okudum ama bunu elde etmek mümkün olmamıştır. Herhangi bir öneriniz var mı?

Yan not etmek, müşteri benim DatabaseContext bir başvuru olmadan başlatıcı aramak mümkün mü?

Tek düşünebildiğim ilgili kodu ekledim. Eğer başka bir şey yardımcı olabilir, lütfen bana bildirin.

Bir şeyler Denedim:

  1. Benim bağlantı dizesi (yine ı için varsayılan beri, sadece adı değişti) sildim
  2. DropCreateDatabaseAlways için DropCreateDatabaseİfModelChanges, hala aynı şeyi değiştirdim.

Edit: çok garip bir şey bir kere oldu, ama yine kırıldı. hiçbir fikrim yok Bağlantı bilen dizeler, ama varsayıyorum.

Databaseİnitializer.cs

public class DatabaseInitializer : DropCreateDatabaseIfModelChanges<DatabaseContext>
{
  protected override void Seed(DatabaseContext context)
  {
    // Seeding data here
    context.SaveChanges();
  }
}

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

}

Global.asax.- cs Application_Start()

protected void Application_Start()
{
  Database.SetInitializer<DatabaseContext>(new DatabaseInitializer());
  AreaRegistration.RegisterAllAreas();
  RegisterGlobalFilters(GlobalFilters.Filters);
  RegisterRoutes(RouteTable.Routes);
}

İstemci web.config

<connectionStrings>
  <add name="DatabaseContext" connectionString="data source=.\SQLEXPRESS;Database=Database;Integrated Security=SSPI;" providerName="System.Data.SqlClient" />
</connectionStrings>

ÇÖZÜM

Belgeler uğruna, burada benim çözüm paylaşıyorum. Tüm yorumlar seyreden bir ağrı olurmuş. Sonunda ayrı sınıflarda Databaseİnitializer ve DatabaseContext vardı. Gerçekten bu küçük değişiklikler tamir ederken anlamıyorum, ama işte burada.

Databaseİnitializer.cs

public class DatabaseInitializer : CreateDatabaseIfNotExists<DatabaseContext>
{
  protected override void Seed(DatabaseContext context)
  {
    // Seed code here
  }
}

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
}

Global.asax.- cs Application_Start()

protected void Application_Start()
{
  Database.SetInitializer(new DatabaseInitializer());
  AreaRegistration.RegisterAllAreas();
  RegisterGlobalFilters(GlobalFilters.Filters);
  RegisterRoutes(RouteTable.Routes);
}

CEVAP
13 HAZİRAN 2011, PAZARTESİ


Bu DbContext derslerimi gibi görünüyor ve sadece iyi tohum nedir:

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

Bu modeli birkaç kez kullandım ve benim için çok iyi dışarı çalıştı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Djbasilio AuToBaSs

    Djbasilio Au

    20 Aralık 2008
  • Eric Enge

    Eric Enge

    2 Kasım 2009
  • jonathepianist

    jonathepiani

    31 Temmuz 2008