Code-first: Mappage d'entités sur des tables de base de données existantes
Je suis en utilisant Entity Framework 6 code-première, avec une base de données existante, mais ayant des problèmes de mappage de mes entités de la base de données des tables.
Normalement, je voudrais utiliser la base de données-première approche et de mon entité et le contexte du code généré, mais en utilisant le concepteur est devenu une immense douleur.
J'ai mis en Base de données.SetInitializer(null) comme je ne veux pas EF à modifier mon schéma.
Schéma de base de données:
Code-première:
public class Project
{
public int ProjectId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
public class ReleaseControlContext : DbContext
{
public ReleaseControlContext()
: base(ConfigurationManager.ConnectionStrings["ReleaseControl"].ConnectionString)
{
Database.SetInitializer<ReleaseControlContext>(null);
}
public DbSet<Project> Projects { get; set; }
}
Code d'appel:
using(var context = new ReleaseControlContext())
{
var projects = context.Projects.ToList();
}
L'exception suivante est générée:
SqlException: Invalid nom de l'objet 'dbo.Projets".
C'est parce que ma table de base de données est Projet et pas Projets. Je ne veux pas renommer mon contexte de DbSet<Project>
de "Projet", parce que ce serait sémantiquement incorrect.
Question:
Dois-je utiliser l'API fluent/annotations de données de la carte entre la Projet table de base de données et le DbSet<Project> Projects
collection?
source d'informationauteur davenewza
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le
annotation contre le Projet d'une entité, ou dans le
OnModelCreating(DbModelBuilder modelBuilder)
vous pouvez appelermodelBuilder.Entity<Project>().ToTable("Project");
.Les deux devraient faire la même chose.
Vous devez définir une classe (c'est à dire:
ProjectMap
) qui hérite de la classe génériqueEntityTypeConfiguration(T)
oùT
est ici votreProject
classe.Dans ce
ProjectMap
classe, vous pouvez définir explicitement une table de mappage :La classe
ProjectMap
doit être appelée dans la méthode suivante de votreDbContext
classe