Entity Framework 7 la migration pas la création de tables
Je travaille avec mon premier projet à l'aide de Entity Framework 7 et je suis de la connexion à un Serveur SQL server où la Base de données est déjà créé mais il n'y a pas de tables. J'ai créé mon DbContext
et créé une classe, puis définissez un DbSet<>
à l'intérieur de mon contexte. J'ai exécuté les commandes pour activer des migrations et de créer de la première migration, puis rand la commande pour mettre à jour la base de données. Tout semblait bien fonctionner, aucune erreur n'est venu, mais quand je regarde la base de données que le EFMigraitonsHistory
tableau a été créé. Quand je regarde la classe qui a été créé pour la première migration, c'est essentiellement vide. Ce que je fais mal?
Commandes que je suis en cours d'exécution:
dnvm install latest -r coreclr
dnx ef migrations add MyFirstMigration
dnx ef database update
Contexte:
namespace JobSight.DAL
{
public class JobSightDBContext : DbContext
{
public DbSet<NavigationMenu> NavigationMenu { get; set; }
}
}
Classe De La Table:
namespace JobSight.DAL
{
public class NavigationMenu
{
[Required, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Int16 ID { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
public string ExternalURL { get; set; }
public string Title { get; set; }
public Int16? ParentID { get; set; }
public virtual NavigationMenu Parent { get; set; }
}
}
De démarrage.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<JobSightDBContext>(options =>
{
options.UseSqlServer(Configuration["Data:JobSightDatabase:ConnectionString"]);
});
}
Classe pour la migration initiale (générés automatiquement par EF):
namespace JobSight.WebUI.Migrations
{
public partial class Initial : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
}
protected override void Down(MigrationBuilder migrationBuilder)
{
}
}
}
Edit:
Après avoir fait ce que Poke a suggéré, c'est ma nouvelle auto-généré de la migration. La table n'est pas encore en cours de création au niveau base de données.
namespace JobSight.WebUI.Migrations
{
public partial class MyFirstMigration : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "NavigationMenu",
columns: table => new
{
ID = table.Column<short>(nullable: false)
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
ActionName = table.Column<string>(nullable: true),
ControllerName = table.Column<string>(nullable: true),
ExternalURL = table.Column<string>(nullable: true),
ParentID = table.Column<short>(nullable: true),
Title = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_NavigationMenu", x => x.ID);
table.ForeignKey(
name: "FK_NavigationMenu_NavigationMenu_ParentID",
column: x => x.ParentID,
principalTable: "NavigationMenu",
principalColumn: "ID",
onDelete: ReferentialAction.Restrict);
});
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable("NavigationMenu");
}
}
}
OriginalL'auteur Matthew | 2016-01-07
Vous devez vous connecter pour publier un commentaire.
Vous devez configurer l'entité dans votre base de données de contexte. À tout le moins, vous devrez pour ce faire:
Le problème avec votre migrations était un peu caché dans votre projet d'agencement. Donc, ce que vous avez est un
JobSight.DAL
projet qui contient les entités et le contexte de base de données. Et puis vous avez un projetJobSight.WebUI
qui est le véritable ASP projet contenant laStartup.cs
avec la configuration de base de données.C'est à l'origine des problèmes parce que, par défaut EF suppose simplement que pour tout retrouver dans l'actuelle assemblée. Donc, si vous lancez le
ef
commande à partir de votre projet web, il va créer les migrations par là, même si le contexte est dans un autre projet. Mais quand vous êtes alors en essayant d'appliquer la migration, l'EF ne le trouverez pas, car il ne regarde dans le contexte du projet.Donc, pour résoudre ce problème, vous devez créer des migrations dans la
DAL
projet. Vous pouvez le faire en spécifiant le projet lorsque vous appelez laef
commande:Vous pouvez vérifier que cela a bien fonctionné en exécutant
dnx ef migrations list
par la suite. Cela doit maintenant retourner laExample
migration; auparavant, la commande ne retourne rien: Il ne pouvait pas trouver une migration qui est la raison pour laquelle leupdate
commande seulement ditDone
(sans application de la migration) et de la base de données n'a pas été créée. Donc, si vous pouvez maintenant obtenir la migration, vous pouvez ensuite l'appliquer à l'aide de:À noter que depuis la migration est désormais créé dans le DAL projet, vous devez ajouter une référence à
EntityFramework.MicrosoftSqlServer
là, sinon le projet ne compile pas. Ce que vous devez faire avant que vous pouvez exécuter lalist
commande ci-dessus.Enfin, pour plus d'information à ce sujet, voir ce problème.
Le
ef database update
retour de sortie? Êtes-vous sûr que vous êtes à la recherche à la base de données correcte? Vérifiez votre chaîne de connexion pour vous assurer que vous travaillez avec.Je suis sûr que c'est la droite DB. Je peux supprimer le EFMigrationHistory table et qu'il soit recréé, en plus, c'est la seule DB sur le serveur. Quand je lance le
dnx ef database update
de commande il n'est de s'asseoir, puis il ditdone
. Dois-je faire quelque chose de spécial depuis la DB était déjà juste de ne pas avoir toutes les tables?Vous avez créé une nouvelle migration et que la migration a un CreateTable appel dans le
Up
partie, non?Une nouvelle classe de migration a été généré pour moi et il ne contient pas de le
CreateTable
de commande. Je vais poster le nouveau dans l'OP dans un instantOriginalL'auteur poke
Bien que ce n'est pas la réponse à la question d'origine, je poste ma réponse ici, car il pourrait aider quelqu'un qui a un problème similaire. Mon problème est aussi que les tables n'ont pas été créés, mais
dotnet ef migrations add InitialCreate
a créé de 3 .cs fichiers dans le Migrations dossier. Maisdotnet ef database update
seulement créé la MigrationsHistory table etdotnet ef migrations list
n'a pas renvoyé de migrations.Il s'est avéré que le problème était que le Migrations dossier a été exclu du projet Visual Studio. Une fois que je l'ai inclus de nouveau, tout a bien fonctionné.
OriginalL'auteur Tobias