2011-09-26 12 views
5

Sto utilizzando Microsoft Entity Framework con il codice che prima gestisce i miei dati (con MySQL). Ho definito un oggetto POCO, tuttavia, quando provo ad aggiungere dati, dice che la tabella Utenti non esiste. Ho guardato nel DB e ha creato la tabella User not Users. Come posso rimediare a questo? Mi sta facendo impazzire!Codice quadro entità Prime tabelle plurali di MySql

Grazie!

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

ciò connettore e la versione stai usando? questo sembra arrivare a quel livello .. potrebbe essere sbagliato anche se – gordatron

+0

Hey mysql connector net 6.3.7 –

+0

Anche se aggiungo [Table ("User")] sopra la classit funziona ma id piuttosto che non lo devo fare –

risposta

3

Non ho ancora utilizzato MySQL con EF ma, a prescindere, penso che la soluzione sia l'unbias. Devi disattivare 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>(); 
    } 
} 

Ora EF cercherà il letterale del nome dell'oggetto sul nome della tabella.

Alcuni fantastici tutorial video sono disponibili al http://msdn.microsoft.com/en-us/data/aa937723 nell'ambito del Continuing Learning Entity Framework. Per un'esperienza di apprendimento aggiuntiva, non è possibile specificare quanto sopra ma mappare esplicitamente l'oggetto "utente" alla tabella "utente".

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

+0

Grazie! Devo dartelo perché la spiegazione chiara e il link! Grazie ancora –

2

si può mettere un attributo della classe di dire il nome della tabella:

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

... oppure si potrebbe utilizzare l'API fluente. Per fare ciò, sostituirai il metodo OnModelCreating nella tua classe DbContext.

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

Nelle future versioni di EF, ci è stata promessa la possibilità di scrivere le nostre convenzioni. Quello non in là ancora a partire dalla versione 4.1 ...

(non ho provato 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; } 
    } 
} 
Problemi correlati