2017-07-17 1 views
0

J'utilise Entity Framework Code First dans mon projet, et j'ai fait quelque chose d'assez bête que je ne peux pas réparer. J'ai renommé une table dans SQL Server Management Studio, puis l'ai supprimée. J'ai ensuite recréé la bonne table (juste un 's' qui n'était pas censé être ici). Maintenant, il n'est plus là et je continue d'obtenir des exceptions dans mes requêtes puisque EF cherche une table qui n'existe plus (même si je l'ai renommé partout!). Maintenant, ma table s'appelle RelImpUser et c'était RelImpUsers.Entity Framework renommer erreur

J'ai donc essayé de recréer la table dans SQL Server, puis faire une migration avec:

public override void Down() 
    { 
     DropTable("dbo.RelImpUsers"); 
    } 

Mais cela ne supprime pas ma table. Et chaque fois que j'exécute une requête, elle regarde RelImpUsers, elle ne va pas pour RelImpUser qui est le seul nom que j'ai mis dans mon code. Une idée de comment réparer ça? Je peux ajouter du code si vous voulez, j'ai juste senti que cela n'aide pas beaucoup ici.

Édition 1: Cela peut avoir à voir avec la pluralisation de mes tables. Donc, toutes mes tables avaient toutes des noms pluriels, mais la nouvelle ne le fait pas, MAIS EF est toujours pluraliste parce que j'ai coché l'option lors de la création de code DB d'abord.

Merci!

+1

Je recommande d'aller de la terre brûlée sur celui-ci. Supprimer la base de données de SQL, supprimer vos migrations de votre projet et réinitialiser à partir de votre modèle de données (après avoir corrigé le nom de la table qui est) – Ortund

+0

Quelle version de EF s'il vous plaît? – Jimbot

+0

La version 6.0.0.0 et je suis pour la suggestion de @Ortund, puisque je dois déplacer mon projet sur une machine virtuelle, ce n'est pas vraiment un problème. –

Répondre

1

Code First utilise ses modèles pour créer les requêtes. Vous devrez annoter votre classe RelImpUser (ou ajouter du code Fluent comparable):

using System.ComponentModel.DataAnnotations.Schema; 

[Table("RelImpUser")] 
public class RelImpUser 
{ 
    public int RelImpID { get; set; } 
    public string Field1{ get; set; } 
    ... 
} 

équivalent Courant:

modelBuilder.Entity<RelImpUser>().ToTable("RelImpUser"); 

Si vous ne voulez pas les noms Pluralisé, vous pouvez activer cette convention off:

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

Suis-je le seul qui n'aime pas travailler avec l'API Fluent? Honnêtement, compte tenu de ces options, je serais absolument opter pour le DataAnnotation avant d'ajouter le code fluide – Ortund

+2

Je préfère de loin le code fluide. Séparation des préoccupations. Comme pour garder mes POCOs P :) –

+0

Mais alors, l'annotation doit pointer vers le tableau pluralisé? Signification '[Table (" RelImpUsers ")]', ou le garder au singulier? –