2011-05-15 20 views
20

तो मैं एमवीसी 3 और ईएफ 4 सीख रहा हूं। मैंने कोड को पहली विधि की कोशिश की लेकिन यह मेरे लिए बहुत भ्रमित था .. मैं कक्षाओं को कोई समस्या नहीं बना सकता, लेकिन मुश्किल हिस्सा विदेशी कुंजी और एक-दूसरे के बीच संबंधों से निपटने पर आता है।मॉडल प्रथम दृष्टिकोण का उपयोग करते समय बीज डेटा कैसे करें?

लेकिन मैं पहले मॉडल के साथ चला गया हूं। इस तरह से मैं इसे दृष्टि से डिजाइन कर सकता हूं और देख सकता हूं कि रिश्ते कहां हैं।

मेरे मॉडल के निर्माण के बाद, यह मेरे लिए एक एसक्यूएल बनाता है जो मैं अपने एसक्यूएल एक्सप्रेस डेटाबेस के खिलाफ निष्पादित करता हूं। किया और किया।

अब मुझे अपनी टेबल में डेटा चाहिए। निस्संदेह मैं उन्हें सर्वर एक्सप्लोरर का उपयोग करने में जोड़ सकता हूं, लेकिन अधिकतर संभावना है कि मैं अपने मॉडल में बदलाव करूँगा जैसा कि मैं साथ जाता हूं। और डेटाबेस को अद्यतन रखना जारी रखें। तो मैं डेटा मैन्युअल रूप से दर्ज नहीं कर सकता। मुझे पता है कि क्या आप पहले कोड का उपयोग करते हैं, आप DropCreateDatabaseIfModelChanges प्राप्त कर सकते हैं और seed विधि को ओवरराइड कर सकते हैं।

हालांकि मॉडल मॉडल के साथ मैं यह कैसे कर सकता हूं? तो अब क्या

protected void Application_Start() 
{ 
    Database.SetInitializer<BettingContext>(new DatabaseInitializer()); 
    AreaRegistration.RegisterAllAreas(); 

    RegisterGlobalFilters(GlobalFilters.Filters); 
    RegisterRoutes(RouteTable.Routes); 
} 

:

public class DatabaseInitializer : IDatabaseInitializer<BettingContext> { 
    public void InitializeDatabase(BettingContext context) { 
     var teams = new List<Team> { 
      new Team { Name="Toronto Maple Leafs", League="NHL"}, 
      new Team { Name="Boston Bruins", League="NHL"}, 
      new Team { Name="Vancouver Canucks", League="NHL"}, 
      new Team { Name="Nashville Predators", League="NHL"}, 
      new Team { Name="Montreal Canadiens", League="NHL"}, 
     }; 
    } 
} 
बेशक

और मेरे वैश्विक फ़ाइल में: मैं निम्नलिखित कोड है? विधि को चलाने के लिए मैं इसे कैसे कहूं? मैं क्या गलत कर रहा हूं?

public class MySeedData : DropCreateDatabaseIfModelChanges<YourDataBaseContextClass> 
{ 
    protected override void Seed(YourDataBaseContextClass context) 
    { 
     // Create objects here and add them to your context DBSets... 

    } 
} 

public class YourDataBaseContextClass : DbContext 
{ 


} 

फिर, Application_Start() भीतर आप कॉल:

उत्तर

6

आप कुछ इस तरह हो सकता है

Database.SetInitializer(new MySeedData()); 

आपके मामले में, आप DbSets बनाने (पहले कक्षाएं अपने मॉडल का उपयोग कर) की कोशिश कर सकते मैन्युअल रूप से और उपरोक्त कोड का उपयोग करके इसे प्लग करने का प्रयास करें। यह मॉडल फर्स्ट + कोड पहले का मिश्रण है।

public class FourthCoffeeWebContext : DbContext 
{ 
    public DbSet<Category> Categories { get; set; } 
    public DbSet<Product> Products { get; set; } 
} 

इस को जोड़ना: CreateDatabaseIfNotExists<(Of <(<'TContext>)>)>

+1

क्या यह काम करेगा भले ही मैं कोड फर्स्ट के बजाय मॉडल फर्स्ट दृष्टिकोण का उपयोग कर रहा हूं? – masfenix

+0

@masfenix: शायद ... –

+2

यह बिल्कुल काम नहीं करता है :( – masfenix

13

मॉडल पहले कोड पहले से काफी अलग है के रूप में आप वास्तव में मॉडल से डेटाबेस उत्पन्न के रूप में आप इस पर काम कर रहे हैं। आपको डेटाबेस बनाने और इसे मैन्युअल रूप से चलाने के लिए SQL मिल जाता है, इसलिए मुझे अपने बीज डेटा के साथ एक दूसरी SQL स्क्रिप्ट के आगे रखने के लिए यह तार्किक लगता है।

यदि मैं मॉडल में परिवर्तन करता हूं, तो SQL स्क्रिप्ट अद्यतन किया जाता है और मुझे निश्चित रूप से मेरी बीडी एसक्यूएल स्क्रिप्ट (जो आसानी से मेरे डेटाबेस निर्माण स्क्रिप्ट के बगल में स्थित है) की समीक्षा करने की आवश्यकता है, मैं बस दूसरे के बाद 1 चलाता हूं।

यह दृष्टिकोण अभी तक ठीक काम कर रहा है और यह 'डेटा लोडर कहां है और यह एक खाली डेटाबेस की पहचान कैसे करता है' का भ्रम पैदा नहीं करता है।

0

(मैं भी बीज डेटा के साथ डेटाबेस बनाने के लिए अपने कस्टम कार्रवाई के लिए दोनों मेरे सेटअप परियोजना में इन SQL स्क्रिप्ट शामिल कर सकते हैं।) मैं एक सीडिंग नियंत्रक निम्न के समान का उपयोग करें:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MyProject.Models; 

namespace MyProject.Controllers 
{ 
    public class SeedController : Controller 
    { 
     public string Index() 
     { 
      ContactDBContext db = new Models.ContactDBContext(); 

      Person person = new Person(); 
      person.FullName = "Mr Test"; 
      person.Notes = "It's me!"; 
      db.People.Add(person); 
      db.SaveChanges(); 
      return "Seeding complete."; 
     } 
    } 
} 
फिर

आप के बाद मॉडल एंटिटी आरेख से अपना डेटाबेस फिर से बनाया है अपनी वेबसाइट के "/ बीज" यूआरएल पर नेविगेट करें और यह आपके बीज डेटा के साथ दोबारा तैयार होगा।

+0

डाउनवॉटर टिप्पणी करने की परवाह करते हैं? – Caltor