2011-09-26 14 views
5

Estoy usando Microsoft Entity Framework con el código primero para administrar mis datos (con MySQL). Definí un objeto POCO, sin embargo, cuando trato de agregar datos, dice que la tabla Usuarios no existe. Busqué en el DB y creó la tabla Usuario no usuarios. ¿Cómo puedo remediar esto? ¡Me está volviendo loco!Entity Framework Code First MySql Pluralizing Tables

Gracias!

public class User 
{ 
    [Key,Required] 
    public int UserId { get; set; } 

    [StringLength(20), Required] 
    public string UserName { get; set; } 

    [StringLength(30), Required] 
    public string Password { get; set; } 

    [StringLength(100), Required] 
    public string EmailAddress { get; set; } 

    [Required] 
    public DateTime CreateDate { get; set; } 

    [Required] 
    public bool IsActive { get; set; } 
} 
+0

lo conector y la versión está usando? esto parece entrar en ese nivel ... podría estar equivocado, aunque – gordatron

+0

hey mysql connector net 6.3.7 –

+0

Además, si agrego [Table ("User")] arriba el classit funciona pero id no tiene que hacer eso –

Respuesta

3

No he usado MySQL con EF todavía, pero a pesar de todo, creo que la solución es unbias. Debe desactivar Pluralize Table Convention.

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

public class MyDbContext: DbContext 
{ 
    protected override void OnModelCreating(ModelBuilder modelBuilder) 
    {  
     modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
    } 
} 

Ahora EF buscará el literal del nombre de su objeto en el nombre de la tabla.

Algunos excelentes videos tutoriales están en http://msdn.microsoft.com/en-us/data/aa937723 en el Marco de la Entidad de Continuar Aprendiendo. Para obtener experiencia de aprendizaje adicional, no puede especificar lo anterior, sino asignar explícitamente el objeto 'usuario' a la tabla 'usuario'.

Referencias adicionales: http://blogs.msdn.com/b/adonet/archive/2010/12/14/ef-feature-ctp5-fluent-api-samples.aspx

+0

¡Gracias! ¡Tengo que dártela porque la explicación clara y el enlace! Gracias de nuevo –

2

Se puede poner un atributo de la clase diciendo el nombre de la tabla:

[Table("Users")] 
public class User 
{ 
    //... 
} 

... o puede utilizar la API de fluidez. Para hacer esto, anulará el método OnModelCreating en su clase DbContext.

public class MyDbContext : DbContext 
{ 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().Map(t => t.ToTable("Users")); 
    } 
} 

En las versiones futuras de EF, nos han prometido la posibilidad de escribir nuestras propias convenciones. Eso no es de allí todavía partir de la versión 4.1 ...

(no hemos probado con MySQL ...)

4
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Data.Entity; 
using System.Data.Entity.ModelConfiguration.Conventions; 

namespace YourNamespace 
{ 
    public class DataContext : DbContext 
    { 
     protected override void OnModelCreating(DbModelBuilder dbModelBuilder) 
     { 
      dbModelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); 
     } 

     public DbSet<User> User { get; set; } 
    } 
} 
Cuestiones relacionadas