Entity Framework primo codice convenzioni di denominazione - torna a nomi di tabella plurale?
-
09-10-2019 - |
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
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