值不能为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;
}
}
答案 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)
对于那些为什么得到的狩猎
EF的肠道无法解释的例外情况。 检查其中一个POCO未使用不支持的类型。我在此列表中检查POCO 并非每种类型都可以在Entity框架中映射。截至EF 5.0值不能为null。参数名称:键
// 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首先对代码进行逆向工程而不是触摸模型,那么这绝不应该是一个问题。