27 votes

Entity Framework Code Premières conventions de dénomination - retour à plusieurs noms de table?

Je suis juste de prendre une fissure à entity framework code first. À la suite de leur convention de nommage, nous avons maintenant au nom de nos tables pluriel pour ne pas avoir à intervenir avec l'outil. Je sais que les mappages peuvent être plus monté. Ma question est, après des années de suite le singulier convention de nommage nous sommes de retour à l'aide de pluriel des noms?

Aussi, je me demandais pourquoi les nouveaux exemples ont été en utilisant des Comptoirs au lieu de l'Aventure Œuvres. Je pense que la raison en est parce que AW utilise singulier de nommage et qu'ils ne serait pas en mesure de montrer les pas de code

54voto

Morteza Manavi Points 20486

La version RTM de Code de la Première, sera totalement en charge une fonctionnalité appelée Enfichable Conventions où vous pouvez ajouter ou remplacer la valeur par défaut des conventions telles que celle que vous avez mentionné.

Heureusement, ce que vous cherchez est déjà inclus dans CTP5. Vous pouvez activer et désactiver le pluralisant les noms de table convention avec la suppression de PluralizingTableNameConvention convention. C'est tout le code que vous devez écrire pour cette question:

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

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


À propos de votre secound questions, la raison pour laquelle vous plus voir la base de données les Comptoirs de Adventure Works est juste parce que AW est un énorme et les Comptoirs est une assez petite base de données donc un meilleur ajustement pour les échantillons et les Procédures pas à pas. Cela dit, vous avez encore le besoin d'écrire un peu de code pour travailler avec la base de données Northwind dans le Premier Code.

2voto

Nestor Points 872

voici un extrait du code que j'utilise et qui fonctionne à 100%. Essayez de copier-coller et essayez-le, il doit créer des noms de table de noms singuliers. J'utilise EF4.1 et CE4.0

Classe POCO

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

Contexte des données

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

L'initialiseur de semences

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

Essayez de copier et coller ce code, puis écrivez du code pour déclencher la création de la base de données (c'est-à-dire essayez de récupérer les enregistrements et de les afficher dans la page d'index).

1voto

Nestor Points 872

J'ai essayé et c'est comme EF4 CTP5 est totalement ignorant. Quel est le problème?

à l'aide de la section:

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

Classes POCO

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

Les tableaux générés:

Blogs
BlogCategories
BlogCategoryLists
BlogFeedbacks

Ce dont j'ai besoin:

Blog
BlogCategory
BlogCategoryList
BlogFeedback

Une chose peut être différent est j'ai divisé ma solution en deux projets de Base et le Web. Core a des Modèles, des Services et de tous les le Premier Code. Web a seulement les Contrôleurs et les Vues et une référence à la Base. Le SetInitializer().De la graine() est à l'intérieur d'une fonction dans le coeur, et dans le Web mondial.asax le Cœur.SetInitializer est appelé, afin de garder tous les CTP5 des fonctions à l'intérieur du Noyau. La base de données est recréé ok, les données sont remplis ok, juste la convention tient au PLURIEL les NOMS de TABLE, ignorant la modelBuilder remplacer

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X