Impossible de créer une base de données lors de l'utilisation de classes générées par POCO en tant qu'entités
-
21-12-2019 - |
Question
Pour une raison quelconque, j'ai commencé mon développement de ma conception de la base de données.Ensuite, j'ai utilisé Poco pour générer mes entitages, vos configurations d'entité et le contexte.
À ma prochaine étape, je voudrais faire ma candidature à créer une nouvelle base de données si la base de données spécifiée dans la chaîne de connexion du fichier de configuration n'existe pas.
Le problème que j'ai fait face au moment est le suivant: Quand j'essaie d'obtenir FirstArdefault d'un DBSet de mon modèle, je reçois le message d'erreur suivant
System.Data.entity.core.EntytyCommandExException: une erreur eu lieu lors de l'exécution de la définition de commande.Voir l'intérieur Exception pour plus de détails.---> System.Data.sqlclient.SQLEXCEPXECET: Nom d'objet non valide 'dbo.role'.
J'utilise la configuration suivante de mon entité
internal class RoleConfiguration : EntityTypeConfiguration<Role>
{
public RoleConfiguration(string schema = "dbo")
{
ToTable("Role", schema);
HasKey(x => x.RoleId);
Property(x => x.RoleId).HasColumnName("RoleId").IsRequired().HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
HasMany(t => t.Roles_RoleId).WithMany(t => t.Roles_ChildRoleId).Map(m =>
{
m.ToTable("RoleRoles", schema);
m.MapLeftKey("ChildRoleId");
m.MapRightKey("RoleId");
});
}
}
La solution
Si vous souhaitez que EF crée une base de données pour vous, vous devez définir une initialiseur correcte dans le constructeur de contexte.Par exemple, comme celui-ci:
public YourContextEntities() : base("name=ConnectionStringName")
{
Database.SetInitializer(new CreateDatabaseIfNotExists<YourContextEntities>());
}