2009-12-24 3 views
4

valeur ne peut pas être le nom null.Parameter: clévaleur ne peut pas être le nom null.Parameter: clé

J'ai commencé à obtenir cette erreur depuis que j'ai mis à exécution les StructureMapControllerFactory comme mon DefaultControllerFactory.

En fait, j'ai copié le code de MVC Sample App StoreFront, mais je ne pouvais pas comprendre pourquoi cette erreur ne cesse d'apparaître. Même cette erreur montre que l'application fonctionne toujours.

Quelle peut être la raison de cette erreur?

Merci pour votre temps


System.ArgumentNullException was unhandled by user code 
    Message="Value cannot be null.\r\nParameter name: key" 
    Source="mscorlib" 
    ParamName="key" 
    StackTrace: 
     at System.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument) 
     at System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
     at System.Collections.Generic.Dictionary`2.ContainsKey(TKey key) 
     at StructureMap.Util.Cache`2.get_Item(KEY key) 
     at StructureMap.BuildSession.CreateInstance(Type pluginType) 
     at StructureMap.Container.GetInstance(Type pluginType) 
     at StructureMap.ObjectFactory.GetInstance(Type pluginType) 
     at Yacht.Web.Controllers.StructureMapControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType) in D:\Documents\WebSites\JOBS\Yacht\Yacht.Web\Controllers\StructureMapControllerFactory.cs:line 16 
     at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName) 
     at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory) 
     at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) 
     at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) 
     at System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) 
     at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() 
     at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
    InnerException: 

et c'est la classe StructureMapControllerFactory

public class StructureMapControllerFactory : DefaultControllerFactory 
    { 
     protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType) 
     { 
      return ObjectFactory.GetInstance(controllerType) as Controller; 
     } 
    } 
+0

Où apparaît-elle? Quelle est la trace de la pile complète? Informations importantes pour aider au débogage. –

+0

J'ai posté la trace de la pile ... merci –

Répondre

4

Sachez également que si un modèle a des propriétés définies qui ne correspondent pas à un champ de base de données, cette erreur peut se produire. C'était un peu compliqué de le retracer, alors je vais laisser une réponse sur SO au cas où d'autres rencontreraient le même problème.

Ma solution était simple, comprennent DataAnnotations:

using System.ComponentModel.DataAnnotations; 

Et puis utiliser l'annotation NotMapped sur les propriétés spécifiques:

[NotMapped] 
public string SomeCustomProperty { get; set; } 
1

Pour ceux qui chasse pourquoi ils se

La valeur ne peut pas être nulle. Nom du paramètre: clé

exception inexpliquée dans les intestins de EF. Cochez l'un des POCO n'utilise PAS un type non pris en charge. Je vérifie les POCOs par rapport à cette liste Tous les types ne peuvent pas être mappés dans Entity Framework. À partir de EF 5.0

// MY TESTING WOULD Indicate SEE // NOT SUPPORTED comment 

    public const string Boolean = "System.Boolean"; 
    public const string Byte = "System.Byte"; 
    public const string ByteArray = "System.Byte[]"; 
    public const string SByte = "System.SByte"; // NOT SUPPORTED 
    public const string Char = "System.Char";  // NOT SUPPORTED 
    public const string Decimal = "System.Decimal"; 
    public const string Double = "System.Double"; 
    public const string Single = "System.Single"; 
    public const string Int32 = "System.Int32"; 
    public const string UInt32 = "System.UInt32";// NOT SUPPORTED 
    public const string Int64 = "System.Int64"; 
    public const string UInt64 = "System.UInt64";// NOT SUPPORTED 
    public const string Int16 = "System.Int16"; 
    public const string UInt16 = "System.UInt16"; 
    public const string String = "System.String"; 
    public const string DateTimeOffset = "System.DateTimeOffset"; 
    public const string DateTime = "System.DateTime"; 
    public const string Guid = "System.Guid"; 
    public const string Enum = "System.Enum"; 
    public const string Type = "System.Type";// NOT SUPPORTED 

Cette liste n'est pas exhaustive. Mais il couvre certains types scalaires importants souvent utilisés qui peuvent causer des problèmes.

0

La réponse de Revgum était exactement ce dont j'avais besoin en utilisant VS2012 MVC et EF5. Un changement mineur dans EF5, le [NotMapped] définition de la décoration est dans cette bibliothèque:

using System.ComponentModel.DataAnnotations.Schema; 

(je crois que ses œuvres de bibliothèque pour EF4 et au-dessous, mais ne me citez pas que)

De plus, gardez Si votre modèle possède une relation de clé étrangère, tous les modèles enfants peuvent provoquer la même erreur si leurs champs non mappés ne sont pas correctement décorés.

Si vous utilisez d'abord EF pour désosser le code de l'ingénieur et ne touchez pas les modèles, cela ne devrait jamais poser de problème.

Questions connexes