2012-08-26 11 views
22

मैं इकाई फ्रेमवर्क 5 का उपयोग करने की कोशिश कर रहा हूं। पहली समस्या यह थी कि ईएफ स्वचालित रूप से टेबल बनाता है। मैंने dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>() सहित इसे ठीक करने का प्रयास किया। दूसरी समस्या यह त्रुटि थी जैसेइकाई फ्रेमवर्क 5 के लिए टेबल निर्माण को बहुवचन कैसे बंद करें?

डेटाबेस बनाया गया था, इसलिए 'CountryContext' संदर्भ का समर्थन करने वाला मॉडल बदल गया है। डेटाबेस को अद्यतन करने के लिए कोड प्रथम माइग्रेशन का उपयोग करने पर विचार करें।

मैंने इसे dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); द्वारा ठीक करने का प्रयास किया लेकिन कोई समझ नहीं आया। डेटा का उपयोग परत अगले:

Table(Name = "tblCountries")] 
public class Country 
{ 
    [Column(Name = "id", IsDbGenerated = true, IsPrimaryKey = true)] 
    public int Id {get;set;} 

    [Column(Name = "name")] 
    public string Name {get;set;} 
} 

public class CountryContext:DbContext 
{ 
    public CountryContext(string connStr):base(connStr) 
    { 
    } 

    public DbSet<Country> TblCountries { get; set; } 

    protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
    { 
     dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); 
    } 
} 

    public class CountryDal:BaseDal 
{ 
    public int CheckIsExist(Country country) 
    { 
     int id = 0; 
     using (var context = new CountryContext(ConnectionString)) 
     { 
      var first = context.TblCountries.FirstOrDefault(el => el.Name == country.Name); 
      if (first != null) 
      { 
       id = first.Id; 
      } 
     } 
     return id; 
    } 
    } 

अतिरिक्त जानकारी: वी.एस. 2012, ढांचा 4.5, इकाई की रूपरेखा 5.0.0.0 और एफई 4 के लिए यह सही काम करता है (OnModelCreating विधि के बिना)।

+0

पूरा अनुमान यहाँ लेकिन एफई अभी भी ईएनटी पहचान करता है जब आप इसे सभी सीएपीएस का उपयोग करने के विरोध में 'आईडी' के रूप में इंगित करते हैं, तो यह पहचानकर्ता के रूप में इंगित करता है: 'आईडी' –

उत्तर

42

आप OnModelCreating विधि में इस कोड लिख सकते हैं:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
5

आप टेबल बनाने के लिए एफई और प्रबंधित स्थिरता के बीच आप मॉडल और डेटाबेस सिर्फ अपने आवेदन के स्टार्टअप पर इस का उपयोग नहीं करना चाहते हैं:

Database.SetInitializer<CountryContext>(null); 
+0

यह समस्या हल करेगा लेकिन सवाल नहीं - हालांकि प्रश्नकर्ता गलत प्रश्न पूछ रहा है;) –

4

एफई 6.0 में LINQ का उपयोग करना:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 
    var conventions = new List<PluralizingTableNameConvention>().ToArray(); 
    modelBuilder.Conventions.Remove(conventions); 
} 
+1

अजीब - आप एक को हटा दें लक्ष्य प्रकार की खाली सरणी? –

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