2013-07-29 2 views
20

मैं विजुअल स्टूडियो 2012 में एमवीसी 4 का उपयोग कर एक प्रोजेक्ट पर काम कर रहा हूं और तालिका में एक कॉलम जोड़ा है।एमवीसी 4 में अपना डेटाबेस अपडेट करने के लिए माइग्रेशन कैसे सक्षम करें?

अब जब मैं अपनी परियोजना को डीबग करना चाहता हूं तो त्रुटि मेरे डेटाबेस को अपडेट करने के लिए माइग्रेशन का उपयोग करने के लिए कहती है।

मुझे क्या करना है?

मैं एक बहुत खोज की है और इस तरह के कुछ तरीकों पाया:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    Database.SetInitializer<ResTabelaIndex>(null); 
} 

लेकिन पता नहीं है कि कैसे और कहाँ लागू करने के लिए इस ..., Global.asax आदि ...

app_start में करने की कोशिश की

जो मैंने पाया वह सीधे कंसोल में न्यूजेट से माइग्रेशन को सक्षम करने के लिए था।

लेकिन मैं यह काम नहीं कर सकता।

आदेश मैं का उपयोग करें:

Enable-Migrations -EnableAutomaticMigrations 

==> consolse का कहना है कि एक से अधिक संदर्भ मिला था। उपयोग सक्षम करने के लिए, Enable-Migrations -ContextTypeName NameOfTheNamespace.Models.DefaultConnection

लेकिन मुझे नहीं पता कि -ContextTypeName क्या है, मैंने बहुत कोशिश की है लेकिन समझ में नहीं आ रहा है।

My Model Code: 

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 
using System.Data.Entity.Migrations; 
using System.ComponentModel.DataAnnotations; 
using System.Data.Entity.Infrastructure; 

namespace Vista.Models 
{ 
    public class TabelaIndex 
    { 
     public int ID { get; set; } 
     public string n_empresa { get; set; } 
     public string titulo{ get; set; } 
     public string url { get; set; } 
     public string imagens { get; set; } 
    } 

    public class DefaultConnection : DbContext 
    { 
     public DbSet<TabelaIndex> ResTabelaIndex { get; set; } 
    } 

} 

उत्तर

26

त्रुटि यह कह रही है कि आपके पास दो संदर्भ हैं। जब आप पहली बार एमवीसी 4 का उपयोग कर एक प्रोजेक्ट बनाते हैं, तो विजुअल स्टूडियो आपके SimpleMembership के लिए डिफ़ॉल्ट रूप से संदर्भ (मॉडल/खाता.cs जांचें) या ctrl+fUsersContext के लिए एक संदर्भ बनाता है, यदि आप SimpleMembership का उपयोग नहीं कर रहे हैं तो आप केवल इस फ़ाइल को हटा सकते हैं। इस संदर्भ हटाने के बाद, आगे बढ़ें और अपने DefaultConnection वर्ग के लिए निम्नलिखित जोड़ें:

protected override void OnModelCreating(DbModelBuilder builder) 
{ 
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<DefaultConnection,Configuration>()); 
} 

आप माइग्रेशन सक्षम सही ढंग से आप भी एक फ़ोल्डर Migrations बुलाया जाना चाहिए था और इसके अंदर एक Configuration वर्ग, इसके निर्माता इस तरह दिखना चाहिए (आप स्वत: माइग्रेशन सक्षम करना चाहते हैं):

public Configuration() 
{ 
    AutomaticMigrationsEnabled = true; 
} 
+0

Fwiw, मैं "जोड़ने के लिए की जरूरत base.OnModelCreating (बिल्डर); " अपने उत्पादन सर्वर पर काम करने के लिए स्वचालित माइग्रेशन प्राप्त करने के लिए अपने ऑनमोडेल क्रिएटिंग ओवरराइड के अंत तक (ईएफ 6 का उपयोग करके)। –

1

यदि आपके पास छोटे बदलाव हैं तो माइग्रेशन की आवश्यकता नहीं है। आप एसक्यूएल स्क्रिप्ट के साथ डेटाबेस पर किसी भी तालिका में कॉलम जोड़ सकते हैं और मेटाडेटा टेबल को मॉडल में हटा सकते हैं और हटा सकते हैं। (बैक अप डेटाबेस पहले कोई संदेह नहीं है)।

या आप उपयोग कर सकते हैं माइग्रेशन इस तरह: aspnet-mvc-4-entity-framework-scaffolding-and-migrations

2

कंसोल में इस टाइप का प्रयास करें:

Enable-Migrations -ContextTypeName Vista.Models.DefaultConnection 

Vista.Models.DefaultConnection अपने संदर्भ (वर्ग कि DbContext से विरासत) है।

19

आदेश:

  1. enable-migrations default context
  2. add-migration InitialCreate
  3. add-migration InitialCreate (स्नैपशॉट लागू करने के लिए)
  4. (स्नैपशॉट पैदा करने के लिए)
  5. update-database
  6. update-database -verbose

विस्तृत explination यहाँ होगा: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html

+2

क्या आप इन आदेशों का उत्तर देने के लिए एक स्पष्टीकरण में [संपादित करें] कर सकते हैं? कोड-केवल उत्तर [निराश] (http://meta.stackexchange.com/q/148272/274165) हैं, क्योंकि वे समाधान नहीं सिखाते हैं। (इस पोस्ट को कम से कम एक उपयोगकर्ता द्वारा ध्वजांकित किया गया था, संभवतः क्योंकि उन्होंने सोचा था कि स्पष्टीकरण के बिना कोई जवाब हटाया जाना चाहिए।) –

+0

विस्तृत विवरण के लिए विशेष धन्यवाद LINK –

+0

एसक्यूएल उत्पन्न करने के लिए अद्यतन-डेटाबेस-स्क्रिप्ट –

संबंधित मुद्दे