none
Problema al mapear tablas usando EF code first RRS feed

  • Pregunta

  • Buen día a todos, estoy trabajando con EntityFramework mas precisamente haciendo uso del enfoque codefirst.

    Hasta el momento estoy trabajando con dos modelos uno de Categoría y otro de Producto, pasa que cuando se genera la base de datos. No se por que razón, ocurre un pequeño error con el nombre de la etiqueta que representa una de mis tablas.

    He especificado en el contexto que a mi primer tabla la quiero llamar categorías y a mi segunda tabla Productos.

    Con la primera tabla no hay problema, en cambio la segunda se genera con el nombre Productoes, al parecer siempre ocurre lo mismo  cada vez que  utilizo nombres para las tablas que termines en OS. quisiera saber por que pasa esto, se que al parecer no es algo muy relevante, pero tengo la inquietud. Ademas quisiera saber si hay otra manera de corregir esto a  parte de, hacerle anotaciones a las clases respectivas, mediante la palabra reservada Table.

    Anexo el código, asi como de la estructura de la DB

    using System;
    using System.Collections.Generic;
    using System.Data.Entity;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace EntityFrameworkCF
    {
        public class Categoria
        {
            public int CategoriaId { get; set; }
            public string Nombre { get; set; }
            //propiedad de navegacion
            public virtual List<Producto> Productos{ get; set; }
        }
        public class Producto
        {
            public int ProductoId { get; set; }
            public string Nombre { get; set; }
            public int UnidadesEnExistencia { get; set; }
            //referencia a categoria
            public int CategoriaId { get; set; }
            //propiedad de navegacion
            public virtual Categoria Categoria { get; set; }
    
        }
        public class Contexto :DbContext   
        {
            public Contexto():base("Ejemplo") { }
            public DbSet<Categoria>Categorias { get; set; }
            public DbSet<Producto>Productos{ get; set; }
            
        }
        class Program
        {
            static void Main(string[] args)
            {
                using (var db= new Contexto())
                {
                    Categoria Lacteos = new Categoria { Nombre = "Lacteos" }; 
                    db.Categorias.Add(Lacteos);
                    db.SaveChanges();
                    db.Productos.Add(new Producto{Nombre="leche",UnidadesEnExistencia=3,Categoria=Lacteos});
                    db.SaveChanges();
                    Console.WriteLine();
                }
            }
        }
    }

    Gracias por su Atención.


    • Editado camilo25 martes, 8 de octubre de 2013 22:51
    martes, 8 de octubre de 2013 22:38

Respuestas

  • Buenas Camilo, Entity Framework por convención crea los nombres de las tablas de la base de datos pluralizando el nombre de las clases del modelo, para ellos usa las reglas del idioma inglés, de ahí que de la clase Producto genere Productoes. Si quieres evitar este comportamiento tienes que eliminar la convención.

    Te anexo el código para eliminarla.

    public class Contexto :DbContext { public Contexto():base("Ejemplo") { } public DbSet<Categoria>Categorias { get; set; } public DbSet<Producto>Productos{ get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {

    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } }

    Espero que te ayude,

    Saludos.


    • Marcado como respuesta camilo25 miércoles, 16 de octubre de 2013 22:48
    viernes, 11 de octubre de 2013 0:42

Todas las respuestas

  • Buenas Camilo, Entity Framework por convención crea los nombres de las tablas de la base de datos pluralizando el nombre de las clases del modelo, para ellos usa las reglas del idioma inglés, de ahí que de la clase Producto genere Productoes. Si quieres evitar este comportamiento tienes que eliminar la convención.

    Te anexo el código para eliminarla.

    public class Contexto :DbContext { public Contexto():base("Ejemplo") { } public DbSet<Categoria>Categorias { get; set; } public DbSet<Producto>Productos{ get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) {

    modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); } }

    Espero que te ayude,

    Saludos.


    • Marcado como respuesta camilo25 miércoles, 16 de octubre de 2013 22:48
    viernes, 11 de octubre de 2013 0:42
  • hola

    quizas ayude

    [Entity Framework][Code First] Asociación uno a muchos (1/3)

    alli explico como mapear entidades asociadas

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    viernes, 11 de octubre de 2013 16:27
  • Gracias por tu respuesta Jorge, realmente me ayudo a solucionar mi inquietud.
    miércoles, 16 de octubre de 2013 22:51