我刚刚将我的项目(使用NuGet)更新到Entity Framework 4.1 RC并收到此错误消息:
GenericArguments [0], 'Notesnhac.Library.NotesnhacContext', 上 'System.Data.Entity.IDatabaseInitializer`1 [TContext]' 违反了类型的约束 参数'TContext'。
描述:未处理的异常 在执行期间发生 当前的网络请求。请查看 堆栈跟踪以获取更多信息 错误及其来源 代码。
异常详细信息: System.TypeLoadException: GenericArguments [0], 'Notesnhac.Library.NotesnhacContext', 上 'System.Data.Entity.IDatabaseInitializer`1 [TContext]' 违反了类型的约束 参数'TContext'。
来源错误:
线 114:DependencyResolver.SetResolver(new StructureMapDependencyResolver(容器)); 第115行:#endregion第116行:} 第117行:}第118行:}
源文件:C:\ projects \ Kenny 项目\ Notesnhac \ Notesnhac.Site \的Global.asax.cs 行:116
堆栈追踪:
[TypeLoadException: GenericArguments [0], 'Notesnhac.Library.NotesnhacContext', 上 'System.Data.Entity.IDatabaseInitializer`1 [TContext]' 违反了类型的约束 参数'TContext'。]
Notesnhac.Site.MvcApplication.Application_Start() 在C:\ projects \ Kenny中 项目\ Notesnhac \ Notesnhac.Site \ Global.asax.cs中:116版本信息:Microsoft .NET 框架版本:4.0.30319; ASP.NET 版本:4.0.30319.225
它说错误在第116行,但我不认为错误在哪里。这是代码的片段,它表示错误,第#116行是#endregion
之后的大括号:
protected void Application_Start()
{
// Initalizes the database
System.Data.Entity.Database.SetInitializer<NotesnhacContext>(new ContextInitializer());
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
AutoMapperConfig.CreateMappings();
ControllerBuilder.Current.DefaultNamespaces.Add("Notesnhac.Site.Controllers");
#region StructureMap IoC
IContainer container = new Container(x =>
{
x.For<IControllerActivator>().Use<StructureMapControllerActivator>();
x.Scan(s =>
{
s.Assembly("Notesnhac.Library");
s.TheCallingAssembly();
s.AddAllTypesOf<IController>().NameBy(type => type.Name.Replace("Controller", "").ToLower());
s.WithDefaultConventions();
});
});
DependencyResolver.SetResolver(new StructureMapDependencyResolver(container));
#endregion
}
感谢。
答案 0 :(得分:3)
问题似乎就在于:
System.Data.Entity.Database.SetInitializer<NotesnhacContext>(new ContextInitializer());
通用参数TContext
是required to be a DbContext subtype。您的策略必须实现IDatabaseInitializer。
您没有显示NotesnhacContext
的声明,但编译器说其中一个缺失。
您根本不需要指定类型参数;它将从论证中推断出来。你可以这样做:
System.Data.Entity.Database.SetInitializer(new ContextInitializer());
...假设您首先使用声明解决问题。