Entity Framework DbContext: la Valeur ne peut pas être null, nom du paramètre source
J'ai commencé à l'aide de la CodeFirst approche dans le cadre de l'entité.
Lors de l'exécution de mon code je ne suis pas en mesure d'effectuer toute opération sur le DbSets dans le DbContext - ProductsDb
J'ai vérifié la chaîne de connexion et je pense que c'est correct, mais la tentative d'effectuer une opération de résultats dans l'erreur
Valeur ne peut pas être null, paramètre source.
Ici est la ProductsDb classe
public class ProductsDb : DbContext
{
public ProductsDb(string connectionString) : base(connectionString)
{
}
public ProductsDb()
{
}
public DbSet<AProduct> AProducts;
public DbSet<BProduct> BProducts;
public DbSet<CProduct> CProducts;
public DbSet<DProduct> DProducts;
}
La chaîne de connexion est défini dans l'application.config comme suit:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="ProductsDb" providerName="System.Data.SqlClient"
connectionString="Data Source=MyPC\DEV;Initial Catalog=Test;User ID=sa;
Password=pass;" />
</connectionStrings>
</configuration>
Le code qui génère l'erreur est:
GetAProduct(string id)
{
AProduct aProduct = null;
using (ProductsDb productsDb = new ProductsDb())
{
aProduct = (from a in productsDb.AProducts
where a.Id== id
select a).FirstOrDefault();
}
return aProduct;
}
Toutes les catégories de produits sont en bon vieux classes C#.
Toute aide serait vraiment appréciée, je commence à tirer mes cheveux.
N'ont jamais de problèmes lors de l'écriture de requêtes Sql.
Mise à JOUR: erreur de Copier Coller le GetAProduct méthode a été modifié.
poste le code où vous sont en cours d'initialisation
productsDb
Désolé, post édité
Aller dans la base -> base de données -> connexion -> connectionstring. La chaîne de connexion est la même que dans l'application.config sauf qu'il a ajouté: "Nom de l'Application=EntityFrameworkMUE'
Cependant produitsdb -> base> databse -> connexion -> serverversion a jeté une erreur d'exception InvalidOperationException
OriginalL'auteur Nick Williams | 2013-07-02
Vous devez vous connecter pour publier un commentaire.
Vous devez définir les propriétés des champs de votre contexte de la classe. Donc, au lieu de champs
Vous devriez utiliser les propriétés
Parce que Entity Framework recherche de propriétés. Si vous rechercher des sources de
DbContext
classe, vous verrez, que dans le constructeur à la recherche d'déclaré définir les propriétés et les initialise:Ce set découvrez le service de recherche uniquement pour les propriétés:
Si vous ne déclarez simple champ de
DbSet<T>
type, EF sauter d'initialisation, et de domaine de la valeurnull
après le contexte est créé. C'est pourquoi, où énumérateur jetaitnull source
exception ici:c'est sans aucun doute 🙂
Oui c'est ça. Me déteste un peu maintenant. Lorsque le public, d'avoir des champs de jamais été d'accord????
J'ai ajouté le code qui montre pourquoi la simple champs ne sera pas initialisé
OriginalL'auteur Sergey Berezovskiy
J'ai eu le même message d'erreur si la cause est différente:
J'avais fait tous les POCOs (et de leurs propriétés) qui ont été utilisés par le DbContext
internal
au lieu depublic
. Sergey Berezovskiy a démontré dans sa réponse, EF exige que tous les membres de la classe à des propriétés publiques à initalise. Changerpublic
correction de l'erreur tout de suite.OriginalL'auteur GrandMasterFlush