2016-03-29 24 views
1

Ben Paket Yöneticisi Konsolu aşağıdaki kodu çalıştırırsanız: Bunun dışında tüm tabloları temizlendi de düşündüler, tablolara bazı varsayılan verileri çalışan Tohum yöntemindenVarlık Framwork Kod İlk Göçler

-Update-Database -Force 

önce, ama bu yanlış gibi görünüyor !?

DÜZENLEME

:

veritabanındaki tabloları ben -update veritabanı -force çalıştırdığınızda droped değil Hala neden o kadar da yabancı, bunu yapamazlar gerekir? Ve Seed yöntemiyle eklenen veriler neden her veri -update-database-veriyi çalıştırmaya devam ediyor. Bir kez daha, prevoius eklenmiş verilerin üzerine yazılmamalıdır değil mi? Aşağıdaki metni ASP.NET'dan itibaren bu bağlantıyı ve diğer kaynaklarda okuduğumda Yeni verilerle tohumlamak mümkün olmalı gibi görünüyor ve eski veriler veya tablolar bırakılmalıdır !? Bunu anlamış mıyım yoksa yanlış bir şey mi yapıyorum?

You have configured the Entity Framework to automatically drop and 
re-create the database each time you change the data model. When you 
add, remove, or change entity classes or change your DbContext class, 
the next time you run the application it automatically deletes your 
existing database, creates a new one that matches the model, and seeds 
it with test data. 
+0

Veritabanını silerseniz, yeni bir tane oluşturmak için bir başlatıcıya sahip olmanız gerekir. – Ortund

+0

@Ortund ASP.NET MVC için yeni ve çalışmalar sırasında önceki bir projede, DB'yi yeni sildiğimi ve sonra yazdığımı hatırlıyorum bazı komutlar veya Visual Studio tarafından oluşturuldu, ancak yanılıyor olabilirim? Başlatıcı ile ne demek istiyorsun? –

+0

Bir cevapta açıklayacağım ama işe yaramazsa kabul etmenize gerek yok – Ortund

cevap

2

Varlık Framework Kod Öncelikle MVC proje silmek ve onu Database Initializers kullanarak çalıştırıldığında veritabanı yeniden olabilir kullanma.

//Global.asax.cs 
    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 

     // instanciate your DbContext class 
     OrtundEntities db = new OrtundEntities(); 
     db.Database.Initialize(true); // this calls your chosen initializer 
     db.Seed(); 
    } 

// OrtundEntities 
    public OrtundEntities() 
     : base("DefaultConnection") 
    { 
     Database.SetInitializer<OrtundEntities>(DropCreateDatabaseAlways); 
    } 

MVC'yi web sitesi çalıştırdığınızda Bu her zaman bırakın ve veritabanı oluşturacak (Bir kullanıcının ziyaret o yanı yüzden sadece test amaçlı DropCreateDatabaseAlways her kullandığınızda inanmak).

Alternatif olarak, boşaltmak istediğiniz yalnızca bir veya iki tablo varsa, aşağıdakiler denetleyicinizde sorun olmaz. Bu, tüm diğer verileri taklit etme ve yalnızca boşaltmak istediğiniz tabloları boşaltma yararına sahiptir.

public JsonResult ClearAll() 
    { 
     try 
     { 
      // clears the Receipts and Rewards tables 
      db.Database.ExecuteSqlCommand("truncate table Receipts"); 
      db.Database.ExecuteSqlCommand("truncate table Rewards"); 

      return Json(true, JsonRequestBehavior.AllowGet); 
     } 
     catch (Exception ex) 
     { 
      return Json(ex.Message, JsonRequestBehavior.AllowGet); 
     } 
    } 

DÜZENLEME Söylemeyi unuttum

Yukarıdaki fonksiyonu ile kesmek tabloları diğer tabloları daha sonra bu tablolarda tutulacak sorgu muhtemel hatalara neden olacak güvenmek olduğunu ilişkisel veri varsa o.

+0

Cevabınız için teşekkürler! Kodu daha sonra deneyeceğim –

İlgili konular