Entity Framework Code First dans la bibliothèque de la classe
Je viens de commencer à essayer mes mains sur EF4 le premier code ce matin et j'ai créé ma POCO, les données de contexte et d'Initialiseur de classes dans une classe distincte de la bibliothèque, je crois que c'est l'ordinaire de la chaudière de la plaque de type code. Je référence de la classe dans une MVC3 la demande et l'initialiseur dans le monde.asax. Sur l'exécution de l'application, j'ai remarquer les problèmes suivants
1. Pas de base de données est créée n'importe où (Puis-je ajouter une entrée dans le web.config pour une chaîne de connexion nommée d'après le Contexte de la classe, toujours pas de résultat)
2. Lorsque j'essaie d'accéder à la initalized valeurs, j'obtiens une erreur nulle, évidemment, car il n'y a pas de données.
Quelqu'un peut-il m'aider avec des conseils sur la façon d'obtenir thi chose à travailler (ce serait une honte si j'ai passé toute mon jour de noël apprendre cela, et je ne peux toujours pas le faire fonctionner 🙁 )
Grâce
p.s. J'ai essayé d'insérer des points d'arrêt et j'ai touché l'application méthode d'initialisation, mais il ne fait jamais les Graines de méthode dans l'initialiseur, même si j'ai ajouter un point de rupture, il y a l'!!
Merci.
Initialiseur de classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using F2AController.Models;
namespace F2AController.DataObjects
{
public class F2AInitializer : DropCreateDatabaseAlways<F2AContext>
{
protected override void Seed(F2AContext context)
{
var countries = new List<Country>
{
new Country(){ CountryName="Germany", Active = true},
new Country(){ CountryName="Britain", Active = true}
};
countries.ForEach(s => context.Countries.Add(s));
context.SaveChanges();
var providers = new List<Providers>()
{
new Providers(){ ProviderName="InfoBip", ContactDetails="Rturo Manovic", Active=true, MessageRates= new List<ProviderRates>(){new ProviderRates(){ CountryId=1, DateCreated=DateTime.Now, DateModified=DateTime.Now, Rate=0.05M, Active=true}}}
};
providers.ForEach(p => context.Providers.Add(p));
context.SaveChanges();
var usermobiles = new List<MobileTerminal>()
{
new MobileTerminal(){ Active= true, Credits=200, DateCreated=DateTime.Now, MSISDN="4477565444865"}
};
usermobiles.ForEach(u => context.MobileTerminals.Add(u));
context.SaveChanges();
}
}
}
Contexte De La Classe
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
namespace F2AController.Models
{
public class F2AContext : DbContext
{
public DbSet<Country> Countries;
public DbSet<MobileTerminal> MobileTerminals;
public DbSet<Providers> Providers;
public DbSet<ProviderRates> ProviderRates;
public DbSet<Property> Properties;
public DbSet<ShortMessage> ShortMessages;
public DbSet<UserProperties> UserProperties;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
}
}
}
Mondiale.asax Application méthode d'initialisation
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
Database.DefaultConnectionFactory = new SqlConnectionFactory(ConfigurationManager.ConnectionStrings["F2AContext"].ConnectionString);
Database.SetInitializer<F2AContext>(new F2AInitializer());
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
OriginalL'auteur Obi Onuorah | 2011-12-25
Vous devez vous connecter pour publier un commentaire.
Eureka..enfin!!!
Alors que la recherche d'une solution, je suis tombé sur ce post Entity Framework De Base De Données.SetInitializer tout simplement pas de travail
L'application de la solution proposée pour forcer ma base de données pour créer travaillé au démarrage, comme je m'y attendais, mais ensuite lors de l'exécution de la graine de code, il l'a jeté une exception de pointeur null. Lors de l'enquête, j'ai réalisé que toute tentative pour faire référence à la DBSet des collections à partir de la classe de Contexte a abouti à la même exception. L'inspection de plus, j'ai réalisé qu'au lieu d'utiliser
J'avais utilisé
Ce qui signifiait que je n'ai pas tout implicite de l'initialisation de l'objet, d'où l'exception de pointeur null. J'ai enlevé le forcé code d'initialisation et a couru de nouveau l'application, cette fois, la graine de code ne fonctionne pas jusqu'à ce que j'ai accédé à une page qui en fait interrogé les données de contexte et il a fonctionné à la perfection.
Apparemment, en raison de chargement Paresseux, le code d'initialisation n'est pas exécutée jusqu'à ce qu'il est réellement nécessaire, c'est à dire la première fois que le contexte de données est interrogée dans l'application.
J'espère que cela aide quelqu'un qui a le même problème à l'avenir.
DropCreateDatabaseIfModelChanges
au lieu deDropCreateDatabaseAlways
(face-palm moment). Si vous êtes arrivé sur cette page à ce problème et la solution ci-dessus ne fonctionne pas, vérifiez que vous n'avez pas fait cela. Un travail rapide autour est de le changer pourDropCreateDatabaseAlways
, ou tout simplement ajouter un mannequin bien à votre modèle d'/suppression de la propriété factice.OriginalL'auteur Obi Onuorah
Je voulais partager un autre problème lors de l'utilisation d'une bibliothèque de classe pour le premier code & suis tombé sur ce post. J'ai eu mon code du premier POCO et DataContext de classes dans un projet de bibliothèque de trop et je voulais utiliser ce projet pour créer mon premier code de base de données. J'ai compris qu'il y a une ProjectName drapeau avec lequel on peut spécifier le projet de bibliothèque de classes à rechercher lors de la création de la base de données.
get-help enable-migrations -detailed
ouget-help add-migration -detail
pour voir les autres drapeaux de la situation où DBContext et d'Entités dans une classe de la bibliothèque, mais la chaîne de connexion est dans un autre projetOriginalL'auteur tribal
Le problème peut être avec la connectionstring vous utilisez dans votre site web.config.
Pour SQL CE la suite de la
Pour SQL Express la suite de la
Je suppose que cela devrait faire bouger les choses.
Aussi, je pense que vous devriez regarder cet article EF Premier Code DB d'Initialisation à l'Aide de Web.Config. Il est préférable d'initialiser la base de données à partir du web.config plutôt que de global.asax fichier
OriginalL'auteur Pankaj Upadhyay