15

के साथ बुलाया नहीं गया है, इसलिए मैं इस समस्या के साथ 4.1 (अब मैं 4.3 पर हूं) से संघर्ष कर रहा हूं। यह बीज विधि कहा जाता है करने के लिए मुझे लगता है कि, सभी मुझे क्या करना होना चाहिए निम्नलिखित है:बीज विधि को EntityFramework CodeFirst

1) sqlserver 2 पर एक खाली डेटा सूची बनाएं) नीचे कोड निष्पादित करें:

Database.SetInitializer(new DropCreateDatabaseAlways<SiteDB>()); 

मैं अपने SiteDB इस प्रकार परिभाषित किया गया है:

public class SiteDBInitializer : 
    DropCreateDatabaseAlways<SiteDB> 
{ 
    protected override void Seed(SiteDB db) 
    { 
      ... (break point set here that never gets hit) 

मुझे लगता है क्योंकि यह मेरी टेबल बनाता है, लेकिन बीज प्रणाली को बुलाती है कभी नहीं करता है जैसे मैं बहुत सरल कुछ कमी की जानी चाहिए।

यह और स्पष्ट करने के लिए, यहां एक पूर्ण उदाहरण है जिसमें सभी कोड शामिल हैं। जब मैंने इसे चलाने के लिए, बीज कभी नहीं कहा जाता हो जाता है:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Text; 
using System.Data.Entity; 

namespace ConApp 
{ 
internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     Database.SetInitializer(new SiteDBInitializer()); 
     using (var db = new SiteDB()) 
     { 
      var x = db.Customers; 
     } 
    } 
} 

public class SiteDB : DbContext 
{ 
    public DbSet<Customer> Customers { get; set; } 
} 

public class Customer 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public long Id { get; set; } 

    public string LastName { get; set; } 
} 

public class SiteDBInitializer : 
    DropCreateDatabaseAlways<SiteDB> 
{ 
    protected override void Seed(SiteDB db) 
    { 
     db.Customers.Add(new Customer() {LastName = "Kellner"}); 
     db.Customers.Add(new Customer() {LastName = "Jones"}); 
     db.Customers.Add(new Customer() {LastName = "Smith"}); 
     db.SaveChanges(); 
    } 
} 

} 

उत्तर

8

इसके बजाय आप Database.SetInitializer(new SiteDBInitializer()); फोन की जरूरत है।

+1

मुझे लगता है कि आपका मतलब है: डेटाबेस.SetInitializer (नया SiteDBInitializer()); मैंने कोशिश की और यह भी काम नहीं किया। –

+1

@ पीटर कैलरर जब आप पहली बार कुछ करते हैं (उदाहरण के लिए क्वेरी)। क्या आपने एक क्वेरी निष्पादित करने का प्रयास किया था? – Eranga

+0

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

0

मैंने इसके लिए सभी उत्तरों को देखा, वास्तव में कुछ भी काम नहीं करता है, और मुझे आश्चर्य है कि क्या डीबी मौजूद नहीं होने पर बीज विधि को कॉल न करने के लिए यह एक Microsoft बग है।

प्रसंग वर्ग:

:

class AlisDbContext : DbContext 
{ 
    public class MyContextFactory : IDbContextFactory<AlisDbContext> 
    { 
     public AlisDbContext Create() 
     { 
      return new AlisDbContext("CompactDBContext"); 
     } 
    } 

    public AlisDbContext(string nameOrConnectionString) : base(nameOrConnectionString) 
    { 
     Database.SetInitializer(new AlisDbInitializer(this)); 
     Database.SetInitializer(new DropCreateDatabaseIfModelChanges<AlisDbContext>()); 
    } 

    public DbSet<SavedCredentials> SavedCredentialses { get; set; } 
} 

फिर AlisDbInitializer की जाँच करें और जैसे बीज विधि कॉल करने की जरूरत है केवल कोड है कि काम किया, वास्तव में वर्ग बीज फोन करता है, तो डीबी मौजूद नहीं है बनाने के लिए था

public AlisDbInitializer(AlisDbContext alisDbContext) 
    { 
     if (!alisDbContext.Database.Exists()) 
     { 
      Seed(alisDbContext); 
     }   
    } 
संबंधित मुद्दे