33

Sadece varlık çerçeve kodunda bir çatlak alıyorum. Adlandırma kurallarını izledikten sonra, tabloya, araca müdahale etmek zorunda kalmayacak şekilde çoğullamak zorundayız. Haritaların aşırı yüklenebileceğini biliyorum. Benim sorum şu, yıllar sonra tekil isimlendirme kuralını takip ettikten sonra çoğul isimleri kullanmaya geri dönüyor muyuz?Varlık Çerçeve Kodu İlk adlandırma kuralları - çoğul tablo adlarına dönün?

Ayrıca, yeni örneklerin neden Adventure Works yerine Northwind kullandığını merak ediyordum. Ben AW tekil adlandırma kullanır ve onlar gösteriş mümkün olmaz hiçbir kod

cevap

68

Kod Birinci RTM sürümü tam bir özelliktir Geçmeli Sözleşmeleri denilen destekleyecektir özellikleri nedeniyle nedenidir düşünüyorum Bahsettiğiniz gibi varsayılan kuralları ekleyebilir veya değiştirebilirsiniz.

Neyse ki, aradığınız şey CTP5'te zaten var. Çoğaltıcı tablo adları sözleşmesini, PluralizingTableNameConvention sözleşmesini kaldırarak kapatabilirsiniz. senin secound sorular hakkında

using System.Data.Entity.ModelConfiguration.Conventions.Edm.Db; 

protected override void OnModelCreating(ModelBuilder modelBuilder) 
{  
    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
} 


, daha AW büyük ve Northwind oldukça küçüktür sırf Macera Works daha Northwind veritabanı bkz nedenle: Bu, bu konuda yazmak için gereken tüm kodudur Bu nedenle veritabanı, örneklere ve Walkthrough'lara daha iyi uyum sağlar. Bununla birlikte, Kod İlkinde Northwind veritabanıyla çalışmak için bir kod yazmanız gerekiyor.

+0

ben modelBuilder.Entity () gibi comething ile sözleşmelerin geçersiz biliyordum. ToTable ("ApplicationUser") ;. Sadece tabloların tekil isimlendirmesinin hala "içeri" şey olup olmadığını merak ediyorum. –

+0

Ne akıcı API kullandığını söyledi ve işte * DEĞİL * ne * * sözleşmeleri kapatarak geliyordu. Uygulamamız için * Eklenebilir Düzenlemeler * ile tamamen * bir sözleşmeyi * kapatabiliriz. Açıklamak için cevabımı güncelledim. –

+2

Açıklama ve örnek için teşekkür ederiz. EF CodeFirst ve MVC 3 arasında bir firehose içiyorum gibi hissediyorum! –

1

Denedim ve EF4 CTP5 gibi tamamen göz ardı ediyor. Neyin yanlış olabilir?

kullanılarak bölümü:

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

DBContext:

public class Blog 
    {...} 
public class BlogFeedback 
    {...} 
public class BlogCategoryList 
    {...} 
public class BlogCategory 
    {...} 

Tablolar oluşturulan

public class SiteDataContext : DbContext 
    { 
     public DbSet<Blog> Blogs { get; set; } 
     public DbSet<BlogFeedback> BlogFeedbacks { get; set; } 
     public DbSet<BlogCategoryList> BlogCategoryLists { get; set; } 
     public DbSet<BlogCategory> BlogCategories { get; set; } 

     protected override void OnModelCreating(ModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>(); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 

POCO sınıfları:

Blogs 
BlogCategories 
BlogCategoryLists 
BlogFeedbacks 

Ben gerekenler:

Blog 
BlogCategory 
BlogCategoryList 
BlogFeedback 

Bir şey farklı olabilir ben iki proje Çekirdek ve Web içine benim çözüm bölmek olduğunu. Çekirdeğin Modelleri, Servisleri ve tüm İlk Kodları vardır. Web'de yalnızca Denetleyiciler ve Görünümler ve Çekirdek referansı vardır. SetInitializer(). Seed(), Core'daki bir işlev içinde ve Web global.asax'da Core.SetInitializer çağrılır, bu nedenle Core içindeki tüm CTP5 işlevlerini saklayın. Veritabanları yeniden oluşturuluyor, veri tamamlandı, yalnızca sözleşmenin PLAYAL TABLO ADI, modele erişmeyi göz ardı ederek,

+0

Tam olarak aynı sorunu yaşıyorum. Bir çözüm buldun mu? – 0xbadf00d

+3

Evet, yanlış yazım hatası yaptım ve yanlış yazdım. "PluralizingEntitySetNameConvention" yerine "PluralizingTableNameConvention" kullandığınızdan emin olun – Nestor

+0

Çok kötü, zaten doğru olanı kullanıyorum. Neden görmezden geldiğine dair hiçbir fikrim yok. – 0xbadf00d

2

, kullanıyorum kodun bir özü ve% 100 çalışıyor. Kopyalamayı ve yapıştırmayı deneyin ve deneyin, tekil ad tablosu adları oluşturmanız gerekir. EF4.1 ve CE4 kullanıyorum.0

POCO sınıf

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 

namespace CloudOne.Models 
{ 
    public class Brand 
    { 
     public int BrandID { get; set; } 
     [MaxLength(25)] 
     [Required] 
     public string BrandName { get; set; } 
     [MaxLength(1000)] 
     public string BrandDescription { get; set; } 
     public int SortOrder { get; set; } 
     //SEO 
     [MaxLength(70)] 
     public string PageTitle { get; set; } 
     [MaxLength(100)] 
     public string MetaDescription { get; set; } 
     [MaxLength(150)] 
     public string MetaKeywords { get; set; } 
     [MaxLength(56)] //50 + "-" + 99,000 
     public string Slug { get; set; } 
    } 
} 

başlatıcı

public class SiteDataContextInitializer: DropCreateDatabaseIfModelChanges<SiteDataContext> 
    { 
     protected override void Seed(SiteDataContext context) 
     { 
      var brands = new List<Brand>() 
      { 
       new Brand { BrandName = "Brand 1", Slug = "brand-1" }, 
       new Brand { BrandName = "Brand 2", Slug = "brand-2" } 
      }; 

      brands.ForEach(d => context.Brands.Add(d)); 

      base.Seed(context); 
     } 
    } 

deneyin bu kodu kopyalayıp yapıştırmak Tohum, daha sonra veritabanı oluşturma tetikleyecek bazı kod yazmak

using System; 
using System.Collections.Generic; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 

namespace CloudOne.Models 
{ 
    public class SiteDataContext: DbContext 
    { 
     public DbSet<Brand> Brands { get; set; } 

     // Twist our database 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
      base.OnModelCreating(modelBuilder); 
     } 
    } 
} 

Veri Bağlam (yani kayıtları getirip indeks sayfasında göstermeyi deneyin).