Domanda

Sto solo prendendo una crepa a un'entità codice del framework prima. A seguito della loro convenzione di denominazione, ora abbiamo di nominare nostre tavole plurali di non dover intervenire con lo strumento. So che le mappature possono essere cavalcati sopra. La mia domanda è, dopo anni di seguito la convenzione di denominazione singolare siamo tornati a utilizzare i nomi plurali?

Inoltre, mi chiedevo perché i nuovi esempi usavano Northwind invece di Adventure Works. Sto pensando il motivo è perché AW utilizza singolare denominazione e non sarebbe in grado di mostrare le caratteristiche non codice

È stato utile?

Soluzione

La versione RTM di codice Prima sosterrà pienamente una caratteristica fredda denominata Convenzioni Pluggable in cui è possibile aggiungere o sostituire le convenzioni di default come quello che lei ha citato.

Per fortuna, ciò che si sta cercando è già incluso nel CTP5. È possibile disattivare la pluralizzando convenzione nomi delle tabelle con la rimozione di PluralizingTableNameConvention di convenzione. Questo è tutto il codice è necessario scrivere per questa materia:

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

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


Circa le vostre domande secound, la ragione per cui più vedere database Northwind di Adventure Works è solo perché AW è un enorme e Northwind è abbastanza piccolo database, quindi, ne fanno una migliore vestibilità per i campioni e scenari. Detto questo, è comunque necessario scrivere del codice per lavorare con database Northwind nel codice prima.

Altri suggerimenti

Ecco uno stralcio del codice che sto usando e sta lavorando al 100%. Prova copia ed incolla e provarlo, si deve creare i nomi di tabella nome singolare. Sto usando EF4.1 e CE4.0

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

Context dati

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

Il seme di inizializzazione

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

Prova a copiare e incollare questo codice, quindi scrivere del codice per attivare la creazione del database (vale a dire cercare di recuperare i record e mostrare nella pagina indice).

ho provato ed è come EF4 CTP5 è totalmente ignorando esso. Che cosa può essere sbagliato?

utilizzando sezione:

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

classi POCO

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

Tavoli generata:

Blogs
BlogCategories
BlogCategoryLists
BlogFeedbacks

Che cosa ho bisogno:

Blog
BlogCategory
BlogCategoryList
BlogFeedback

Una cosa può essere diverso è ho diviso la mia soluzione in due progetti di Core e web. Core ha Modelli, servizi e tutto il codice prima. Web ha solo controller e viste e un riferimento a nucleo. Il SetInitializer (). Seed () si trova all'interno di una funzione in Core e in Web global.asax il Core.SetInitializer è chiamata, in modo da mantenere tutte le funzioni all'interno CTP5 Nucleo. Database viene ricreato ok, i dati è pieno ok, solo la Convenzione mantiene i nomi di tabella plurale, ignorando l'override ModelBuilder

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top