Question

Je cherche à déployer mon application à un environnement de test, mais ne peut pas obtenir Entity Framework pour jouer bien avec la base de données. En développement, j'utilise une base de données initialiseur de semences et la base de données qui a fonctionné parfaitement. Cependant, quand je Déployez l'application à une instance IIS réelle, je ne peux pas l'obtenir à l'interface avec la base de données. Mes règles d'initialisation personnalisées ne sont pas exécutés du tout, donc je suis à la place manuellement la base de données crée.

J'ai utilisé le ObjectContext.CreateDatabaseScript () comme point de départ pour mon script SQL et SSMS vérifie que deux lignes sont peuplées dans le tableau approprié.

Mon problème se pose après l'exécution de l'application. Je fournisseurs d'appartenances personnalisé et rôle, ni qui semblent détecter que les deux rôles existent dans la base de données.

Comment puis-je obtenir mon cadre de l'entité à reconnaître que ces lignes ne sont pas vides? J'utilise actuellement un DbContext privé à l'intérieur d'un référentiel pour gérer la communication avec Entity Framework et désactivé mon habitude jusqu'à ce initialiseur hoquet est résolu.

Le code qui tente de trouver des rôles dans la base de données:

context.Roles.Single(r => r.Name == role)

La base de données affiche les éléments suivants dans le tableau des rôles:

Id  Name     Description
1   Company  NULL
2   Customer NULL

Le LINQ génère une exception de séquence vide, comme context.Roles est vide.

Était-ce utile?

La solution 2

Voici les étapes je suis passé par une migration d'un code premier projet avec une mise en œuvre personnalisée IDatabaseInitializer qui réinitialisent la base de données au cours de chaque session pour une configuration de base de données non volatile.

D'abord, copiez le schéma généré par Entity Framework dans votre dev. projet en exécutant le code suivant et en plaçant la sortie dans un endroit accessible (par exemple: le fichier sur le bureau, du texte brut dans le navigateur, etc.). contexte est une instance de votre classe héritant de DbContext :

((IObjectContextAdapter)context).ObjectContext.CreateDatabaseScript()

Ensuite, enregistrez la chaîne retournée de cet appel dans un fichier SQL. Assurez-vous de retirer la commande qui crée la table de données Entity Framework méta. Cette commande devrait ressembler à ceci:

create table [dbo].[EdmMetadata] 
( 
    [Id] [int] not null identity, 
    [ModelHash] [nvarchar](max) null, 
    primary key ([Id]) 
);

Ensuite, supprimez le code que les graines de la base de données. J'ai utilisé un AppSetting afin que je puisse facilement basculer l'utilisation de ce code après le déploiement sans avoir besoin de le recompiler et Deploy.

if (ConfigurationManager.AppSettings["Mode"] == "Dev")
{
    Database.SetInitializer<PonosContext>(new PonosInitializer());
    new MyContext().Database.Initialize(true);
}

Immédiatement à l'extérieur de cette déclaration, vous avez encore besoin de intialize la base de données, mais assurez-vous de passer false pour que l'initialisation ne se produira que si la base de données n'a pas été initialisé.

new MyContext().Database.Initialize(false);

Enfin, exécutez SQL d'installation sur une base de données vide pour avoir les tables créées avec des champs appropriés.

Si vous déployez et exécutez votre application, il doit se connecter à la base de données et être en mesure de travailler normalement avec toutes les données chargées dans un script externe. Je l'ai testé cette méthode avec succès avec l'adhésion personnalisée et les fournisseurs de rôle.

Autres conseils

A en juger par les commentaires qu'il ressemble il n'y a aucun lien entre Entity Framework et la base de données. Vous ne mentionnez pas quelle version de Entity Framework vous utilisez, mais je suppose que vous avez mis à jour à la dernière (4.3 au moment de l'écriture).

Je remarque que vous dites que vous êtes « créer manuellement la base de données. ». Pourquoi ne pas ouvrir un projet de test et de créer une nouvelle base de données premier modèle en fonction de votre base de données créée manuellement? Cela devrait au moins confirmer que vous pouvez utiliser Entity Framework avec votre configuration. De là, je créerais un autre projet à partir de zéro pour tester le code première approche.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top