Entity Framework Exception: nom d'objet non Valide
Je suis en train de créer une base de données à l'aide de Code de la Première approche. Lorsque j'exécute le code suivant, je suis l'exception suivante. Il n'y a rien de mal dans les champs que j'ai défini? Comment pouvons-nous surmonter ce?
Exception:
Une erreur s'est produite pendant la mise à jour des entrées. Voir l'exception interne pour plus de détails.
Intérieure Exception:
Non valide"nom de l'objet 'dbo.Dîners.
Note: je n'ai pas une telle table (Repas) dans la base de données. Le code est censé créer les tables. J'ai juste donné de la chaîne de connexion pour identifier le serveur comme indiqué dans EF Premier Code: Impossible de se connecter à SQL Server. Dois-je modifier la chaîne de connexion?
Connexions De La Chaîne:
chaîne connectionstring = "Data Source=.;Initial Catalog=LibraryReservationSystem;Integrated Security=True;Connect Timeout=30";
La LibraryReservationSystem base de données est déjà existants de la base de données. Il n'a pas de tables. Je suis dans l'attente d'EF pour créer les tables.
La chaîne de connexion, j'ai copié à partir d'un travail de LINQ 2 SQL application. Dois-je apporter des modifications à l'alimentation EF?
Mise à JOUR
Quand j'ai inclus le code suivant, l'exception a été changé. Maintenant, il dit "non Valide, nom de l'objet 'dbo.Le dîner".". Il est maintenant de se plaindre sur la table; pas des Dîners table.
protected override void OnModelCreating(DbModelBuilder modelbuilder)
{
modelbuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
CODE Original
static void Main(string[] args)
{
string connectionstring = "Data Source=.;Initial Catalog=LibraryReservationSystem;Integrated Security=True;Connect Timeout=30";
using (var db = new NerdDinners(connectionstring))
{
var product = new Dinner { DinnerID = 1, Title = 101 };
db.Dinners.Add(product);
int recordsAffected = db.SaveChanges();
}
}
using System.Data.Entity;
namespace LijosEF
{
public class Dinner
{
public int DinnerID { get; set; }
public int Title { get; set; }
}
public class RSVP
{
public int RSVPID { get; set; }
public int DinnerID { get; set; }
public virtual Dinner Dinner { get; set; }
}
//System.Data.Entity.DbContext is from EntityFramework.dll
public class NerdDinners : System.Data.Entity.DbContext
{
public NerdDinners(string connString): base(connString)
{
}
public DbSet<Dinner> Dinners { get; set; }
public DbSet<RSVP> RSVPs { get; set; }
}
}
RÉFÉRENCE
- http://nerddinner.codeplex.com/discussions/358197
- Entity framework - Nom d'Objet non Valide
- Invalide nom de l'objet 'dbo.TableName " lors de la récupération de données de table
- http://blogs.msdn.com/b/adonet/archive/2011/09/28/ef-4-2-code-first-walkthrough.aspx
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas correct. Si la base de données existe EF n'est pas de créer des tables dans cette base de données. EF pouvez créer la base de données si elle n'existe pas. C'est la valeur par défaut de la base de données de l'initialiseur
CreateDatabaseIfNotExists
qui est appliqué si vous ne modifiez pas explicitement. Vous pouvez sélectionner deux autres initialiseurs:DropCreateDatabaseAlways
ouDropCreateDatabaseIfModelChanges
. Mais aucun de ceux ne peut que créer des tables dans une base de données existante, mais au lieu de supprimer la base de données complètement et de le créer à partir de zéro, y compris toutes les tables.Que pouvez-vous faire:
DropCreateDatabaseAlways
initialiseur une fois laisser EF créer la base de données, y compris les tables, puis retirez-le de l'initialiseur de nouveauOu si vous ne pouvez pas supprimer la base de données pour quelque raison que ce soit écrire du code SQL dans le(Mal, merci à Mark Stafford commentaire)Seed
méthode qui ajoute les tables de la base de données@Slauma réponse est la bonne, les tables sont créées lors de l'initialisation. Il est probablement plus facile de simplement supprimer la base de données et de laisser EF créer (si vous laissez votre chaîne de connexion, il va créer une base de données appelée LibraryReservationSystem sur la machine locale; vous devriez probablement vous spécifiez le nom d'hôte si vous allez utiliser la chaîne de connexion dans le fichier de configuration à ce point).
Vous aurait besoin de quelque chose le long des lignes de:
Et vous aussi, vous avez besoin de mettre l'initialiseur dans votre méthode Principale:
Mot pour le sage: ne JAMAIS déployer une application avec un initialiseur comme ci-dessus. Vous pouvez voir ce blog sur la façon de contrôler les initialiseurs via le fichier de configuration pour plus de détails sur la façon de contrôler ce dans des applications de production.
J'ai juste couru dans le exact même problème - j'avais déjà créé ma base de données sur un développement SQL boîte à l'intérieur de notre réseau qui a besoin de l'authentification SQL.
Quand j'ai couru mon application, pas de tables ont été créées. J'ai trouvé cela génial, mais simple article sur la création d'un Le Premier Code De Base De Données De L'Initialiseur De La Stratégie qui vérifie d'abord si la base de données existe, puis exécute un script sur la base de données pour créer les tables.
Comme indiqué dans l'article - faites attention lorsque cette stratégie est déployée, chaque fois que l'application démarre plus, toutes les tables de base de données sera recréé! Cette stratégie doit être exécuté qu'une fois.
Mais vous le saviez déjà.
Que l'erreur l'indique, vous n'avez pas une table appelée
Dinners
à l'intérieur de votre base de données.Utilisez-vous Seul ou au Pluriel les noms de table? c'est à dire le Dîner ou Dîners?
Ce que j'ai compris, vous attendez le code pour créer la DB automatiquement sur la base de votre description des entités. Mais cela ne se produira pas à moins de créer DB explicitement. Veuillez consulter le lien suivant http://www.simple-talk.com/dotnet/.net-framework/entity-framework-4460---learn-to-create-databases-from-the-model/
et de ce tutoriel sur EF codefirst: http://codefirst.codeplex.com/
Une fois que vous avez votre entités conçu, vous pouvez droit-cliquez sur l'espace de travail du fichier EDMX et sélectionnez " Générer la Base de données de Modèle de...'. Cliquez sur jusqu'à ce que vous avez un script dans votre fenêtre. Pour ce script, vous devez enlever les DB étape de création (si elle existe) et allez tout droit pour CRÉER la TABLE ...
Copier-Coller et de les exécuter quelle que soit la DB que vous avez. Vous pourriez avoir à ajuster le script pour un SGBDR.