2012-08-26 22 views
22

Entity Framework 5'i kullanmaya çalışıyorum. İlk sorun, EF tabloları otomatik olarak oluşturuyordu. dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>() dahil ederek düzeltmeye çalıştım. İkinci sorun veritabanı oluşturulduktan sonra buEntity Framework 5 için tablo oluşturmayı nasıl çoğalt?

'CountryContext' bağlamı destek modeli gibi hata değişti oldu. Veritabanını güncellemek için Kod İlk Geçişlerini kullanmayı düşünün.

dbModelBuilder.Conventions.Remove<IncludeMetadataConvention>(); ile düzeltmeyi denedim, ancak bir anlamı yok. veri erişim katmanı sonraki:

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; 
    } 
    } 

Ek bilgi: VS 2012, çerçeve 4.5, varlık çerçevesi 5.0.0.0 Ve EF 4 için (OnModelCreating yöntemiyle olmadan) mükemmel çalışır.

+0

Komple tahminim burada ama EF hala ent tanıyan var bir kimlik olarak itiraf etmeyin ki bunu 'Id' gibi TÜM CAPS kullanarak karşı: '' '' '' '' '' '' '' '' '' '' ' –

cevap

42

Sen OnModelCreating yönteminde bu kodu yazabilirsiniz:

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

Eğer modellemek ve veritabanı sadece uygulamanın başlangıçta bu kullanmak arasındaki EF tutarlılık tablo oluşturmak ve yönetmek için istemiyorsanız:

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

Bu sorunu çözecektir, ancak soru değil - Soru soran soru yanlış soruyor;) –

4
EF 6.0 LINQ kullanmak

:

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

Garip - bir Hedef tip boş dizi? –