值不能为null。参数名称:键

时间:2009-12-24 22:10:04

标签: c# asp.net-mvc

值不能为null。参数名称:键

我已经开始出现这个错误,因为我已经将StructureMapControllerFactory实现为我的DefaultControllerFactory。

实际上我从MVC Sample App StoreFront复制了代码,但我无法弄清楚为什么这个错误会不断弹出。即使这个错误显示应用​​程序仍在运行。

出现此错误的原因可能是什么?

感谢您的时间


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: 

这是StructureMapControllerFactory类

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

4 个答案:

答案 0 :(得分:4)

另请注意,如果模型定义的属性未映射到数据库字段,则可能发生此错误。跟踪这个问题有点麻烦,所以如果其他人遇到同样的问题,我会在SO上留下答案。

我的修复很简单,包括DataAnnotations:

using System.ComponentModel.DataAnnotations;

然后在特定属性上使用NotMapped注释:

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

答案 1 :(得分:1)

请参阅anurse对StructureMap error when invalid controller的回答。

答案 2 :(得分:1)

对于那些为什么得到的狩猎

  

值不能为null。参数名称:键

EF的肠道无法解释的例外情况。 检查其中一个POCO未使用不支持的类型。我在此列表中检查POCO 并非每种类型都可以在Entity框架中映射。截至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

此列表并非详尽无遗。但它确实涵盖了一些可能导致问题的常用标量类型。

答案 3 :(得分:0)

Revgum的回答正是我使用VS2012 MVC和EF5所需要的。 EF5中的一个小变化,[NotMapped]装饰定义在此库中:

using System.ComponentModel.DataAnnotations.Schema;

(我相信他的图书馆适用于EF4及以下版本但不引用我的内容)

另外,请记住,如果您的模型具有外键关系,则如果未映射的字段未正确修饰,则所有子模型都可能导致抛出相同的错误。

如果您使用EF首先对代码进行逆向工程而不是触摸模型,那么这绝不应该是一个问题。