Question

Je suis en train de prendre une fissure au code entity framework premier. Suite à leur convention de nommage, nous avons maintenant de nommer nos plusieurs tables de ne pas avoir à intervenir avec l'outil. Je sais que les applications peuvent être plus courues. Ma question est, après des années de suivre la convention de nommage unique sommes-nous revenir à l'utilisation des noms au pluriel?

En outre, je me demandais pourquoi les nouveaux exemples utilisaient Northwind au lieu de Adventure Works. Je pense que la raison est parce que AW utilise la dénomination singulière et ils ne seraient pas en mesure de montrer les pas caractéristiques de code

Était-ce utile?

La solution

La version RTM du premier code soutiendra pleinement une fonction froide, appelée Conventions Pluggable où vous pouvez ajouter ou remplacer les conventions par défaut, comme celui que vous avez mentionné.

Heureusement, ce que vous recherchez est déjà inclus dans CTP5. Vous pouvez désactiver la convention des noms de table pluralisation avec suppression PluralizingTableNameConvention convention. Tout cela est le code que vous avez besoin d'écrire pour cette question:

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

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


A propos de vos questions Secound, la raison pour laquelle vous plus voir que la base de données Northwind Adventure Works est juste parce que AW est un énorme et Northwind est une base de données assez faible font donc un meilleur ajustement pour les échantillons et Walkthroughs. Cela dit, vous avez encore besoin d'écrire du code pour travailler avec la base de données Northwind en premier code.

Autres conseils

ici est un extrait du code que je utilise et travaille à 100%. Essayez de copier-coller et essayer, il faut créer des noms de table nom singulier. 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 de 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);
        }
    }
}

La graine initialiseur

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 d'écrire un code pour déclencher la création de base de données (à savoir essayer de récupérer les enregistrements, et afficher dans la page d'index).

J'ai essayé et est comme EF4 CTP5 est totalement ignorant. Que peut-on mal?

en utilisant 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
    {...}

Tableaux généré:

Blogs
BlogCategories
BlogCategoryLists
BlogFeedbacks

Ce que je dois:

Blog
BlogCategory
BlogCategoryList
BlogFeedback

Une chose peut être différent est que je partage mon solution dans deux projets de base et sur le Web. Les modèles de base a, services et tout d'abord le code. Web n'a que les contrôleurs et les vues et une référence à Core. Le SetInitializer () Seed (). Est à l'intérieur d'une fonction de base, et dans le Web global.asax le Core.SetInitializer est appelé, donc gardez toutes les fonctions de base CTP5 à l'intérieur. Base de données est recréée ok, les données est rempli ok, juste la convention conserve NOMS PLURIELLES TABLE, en ignorant le remplacement ModelBuilder

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top