L'Extension Du Système.Les données.Linq.DataContext
J'ai une classe en raison de ma dbml fichier qui s'étend DataContext, mais pour une raison étrange, il me dit
Système.Les données.Linq.DataContext " ne contient pas un constructeur qui prend un '0' arguments"
J'ai suivi les différents tutoriels sur ce sujet et n'ai pas rencontré ce problème, et VS ne semble pas en mesure de le réparer.
Voici ma mise en œuvre
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Linq;
using System.Data.Linq.Mapping;
using System.Reflection;
using System.Text;
using IntranetMvcAreas.Areas.Accounts.Models;
namespace IntranetMvcAreas
{
partial class ContractsControlDataContext : DataContext
{
[FunctionAttribute(Name="dbo.procCC_Contract_Select")]
[ResultType(typeof(Contract))]
[ResultType(typeof(ContractCostCentre))]
[ResultType(typeof(tblCC_Contract_Data_Terminal))]
[ResultType(typeof(tblCC_CDT_Data_Service))]
[ResultType(typeof(tblCC_Data_Service))]
public IMultipleResults procCC_Contract_Select(
[Parameter(Name = "ContractID", DbType = "Int")] System.Nullable<int> ContractID,
[Parameter(Name = "ResponsibilityKey", DbType = "Int")] System.Nullable<int> ResponsibilityKey,
[Parameter(Name = "ExpenseType", DbType = "Char")] System.Nullable<char> ExpenseType,
[Parameter(Name = "SupplierID", DbType = "Int")] System.Nullable<int> SupplierID)
{
IExecuteResult result = this.ExecuteMethodCall(this, (MethodInfo)(MethodInfo.GetCurrentMethod()), ContractID, ResponsibilityKey, ExpenseType, SupplierID);
return (IMultipleResults)result.ReturnValue;
}
}
}
Et c'est ContractsControlDataContext
qui a souligné que le problème
(btw, cela n'a aucun rapport avec un très récent post que j'ai fait, c'est juste que je suis en train de travailler sur la même chose)
MODIFIER
Il est probablement utile de clarifier cela, donc merci de lire très attentivement.
Si vous ne pas étendre DataContext dans la classe partielle, puis ExecuteMethodCall
n'est pas accessible.
'Intranet.ContractsControlDataContext' ne contient pas une définition pour 'ExecuteMethodCall' et aucune méthode d'extension 'ExecuteMethodCall' acceptant un premier argument de type 'Intranet.ContractsControlDataContext' a pu être trouvé (vous manque une directive using ou une référence d'assembly?)
Peut-être que je suis absent quelque chose d'incroyablement stupide?
RÉSOLU
Je pense peut-être que Visual Studio lutté ici, mais j'ai reposait entièrement sur le code généré automatiquement. Quand un clic droit sur la base de données langage de modélisation la vue de conception et de cliquer sur "Afficher le Code", il crée automatiquement une classe partielle pour vous à l'intérieur d'un espace de noms spécifique, cependant, cet espace de noms a été mauvais. Si quelqu'un pouvait préciser ce pour moi, je vous en serais très reconnaissante.
L' .le concepteur.cs fichier se trouve dans namespace Intranet.Areas.Accounts.Models
, cependant l' .cs fichier (partielle de la classe générée pour l' .le concepteur.cs fichier par Visual Studio) a été en namespace Intranet
. Facile à repérer pour quelqu'un de plus expérimenté dans ce domaine que moi.
Le vrai problème est maintenant, qui est la réponse dois-je marquer comme correct? Parce que beaucoup d'entre vous contribué à la recherche de ce problème.
OriginalL'auteur Kezzer | 2009-06-17
Vous devez vous connecter pour publier un commentaire.
L'objet DataContext de linq n'est pas un constructeur vide. Puisqu'il n'est pas un constructeur vide, vous devez passer à l'un des éléments qu'il est l'exception à la base.
À partir des Métadonnées pour le DataContext.
Quelque chose d'aussi simple que ça allait fonctionner. Toute classe qui hérite de la DataConext doit passer au constructeur de base d'au moins l'un des types c'est l'exception.
OriginalL'auteur David Basarab
Je suis en supposant que l'espace de noms et de données (contexte) type de nom de... double vérification que le premier.
Il me semble que la codegen a échoué, et si vous avez seulement votre la moitié des données de contexte (pas la moitié de celui de l'IDE est destiné à fournir). Il y a un bogue connu dans LINQ-to-SQL où cela peut échouer si (comme dans votre cas) le
using
déclarations sont au-dessus de l'espace de noms. Non, je ne plaisante pas. Essayez de changer le code:Maintenant, allez dans le concepteur, modifier quelque chose (par exemple, changer le nom d'une propriété et de le changer en arrière de nouveau) et cliquez sur enregistrer (ce qui force à la codegen). Maintenant, à voir si ça fonctionne.
Après je n'ai que j'ai essayé de reconstruire et sur le dessus de l'erreur je l'ai dit, j'ai été en outre accueilli par "Erreur 2 fichier de Métadonnées 'D:\WEB\IntranetMvcAreas\IntranetMvcAreas\bin\IntranetMvcAreas.dll" ne peut pas être trouvé IntranetMvcAreas.Les Tests"
C'est simplement que les tests unitaires ne va pas être heureux jusqu'à ce que la base de la dll construit... donc je ne pense pas que nous dit rien
J'ai aussi trouvé ceci: blog.paulgeorge.co.royaume-uni/2008/12/07/... mais la fonction a déjà été défini. Encore un ignorant. J'ai re-créé le dbml à partir de zéro et obtiens toujours la même erreur.
Peut-être essayer de le recréer sans votre fichier supplémentaire dans l'existence (le renommer et de les exclure du projet)
OriginalL'auteur Marc Gravell
David Basarab réponse est bonne et doit être marqué comme réponse.
Votre classe n'est pas de fournir de tout constructeur, donc un constructeur par défaut est fourni. Constructeurs par défaut pour les classes dérivées ne peuvent être fournies que si la base de la classe a un constructeur sans paramètre. Cependant, le DataContext de la classe qui est votre classe de base dans cet exemple ne fournit pas d'un constructeur sans paramètre. C'est ce qui explique le message d'erreur du compilateur est retourné à vous.
Modifier:
Exemple:
Une tentative de compilation qui renvoie une erreur dans la classe B:
Quel est le nom de la classe partielle qui existe dans le concepteur.cs fichier?
Vous pouvez en effet être correct sir. Il suffit de vérifier mon montage dans mon post original, vous avez probablement une meilleure idée que moi avec celui-ci 🙂
Souvenez-vous que si vous avez une classe partielle dans un fichier Fichiera.cs, et vous souhaitez ajouter des informations supplémentaires à cette classe dans une classe partielle dans un autre fichier Fichierb.cs, alors la classe partielle que vous déclarez dans Fichierb.cs doit avoir le même nom que celui dans Fichiera.cs. Sur la question de l'espace de noms, je pense que vous pouvez personnaliser l'espace de noms LINQ to SQL utilise lorsqu'il génère ses classes. Il devrait y avoir une propriété dans le concepteur. (J'utilise Entity Framework, donc je suis en train de travailler à partir de la mémoire ici.) J'ai toujours l'impression que vous devriez mark David réponse comme correcte, parce qu'il n'a diagnostiquer la source du message d'erreur première.
D'accord. Eh bien, je suis en train de travailler avec LINQ pour le moment, mais je n'ai aucune idée de ce que le support est comme pour les multiples formes à l'aide de entity framework. Des acclamations.
OriginalL'auteur mvr
Le comportement du générateur concernant les constructeurs est contrôlé, dans une certaine mesure, par les propriétés de la Connexion de la DBML. Si les Paramètres de l'Application est Vrai, et il est un des paramètres de nom de la propriété, il va générer un constructeur qui lit la chaîne de connexion de l'Application Paramètres de l'assemblée.
Si il y a une chaîne de connexion, il va générer un constructeur avec une codé en dur chaîne de connexion dans le .le concepteur.cs fichier.
Si il n'y est ni, il ne générera pas de constructeur sans paramètre de chaîne de connexion, et vous pouvez fournir un paramètre moins un constructeur dans une classe partielle sans provoquer un conflit.
Ces modifications de paramètres à ne pas survivre à un voyage aller-retour du schéma de la base de données, mais j'ai tout simplement effacer les paramètres de connexion à partir des propriétés après avoir fait des changements et avant de me sauver la DBML.
OriginalL'auteur cdonner
@Sander: je pense que vous étiez sur la bonne voie. Au lieu d'utiliser une classe partielle et la mise en œuvre de la fonction de la procédure stockée j'ai plutôt suivi ce blog et utilisé l' *.le concepteur.cs fichier pour le mettre en œuvre. Alors que je suis toujours confronté à des problèmes non type de casting, il n'a à se débarrasser du problème.
Comme je l'ai trouvé, mais je l'ai fait en désespoir de cause, par opposition à la pure volonté. Ne vous inquiétez pas, j'ai appris à la dure que vous ne devez pas modifier le concepteur.cs sinon, tout l'enfer se déchaîne.
OriginalL'auteur Kezzer