EF 4.1 RC - 'System.Data.Entity.IDatabaseInitializer`1 [TContext]'违反了类型参数'TContext'的约束

时间:2011-03-24 23:11:53

标签: asp.net-mvc entity-framework asp.net-mvc-3 entity-framework-4

我刚刚将我的项目(使用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
}

感谢。

1 个答案:

答案 0 :(得分:3)

问题似乎就在于:

System.Data.Entity.Database.SetInitializer<NotesnhacContext>(new ContextInitializer());

通用参数TContextrequired to be a DbContext subtype。您的策略必须实现IDatabaseInitializer。

您没有显示NotesnhacContext的声明,但编译器说其中一个缺失。

您根本不需要指定类型参数;它将从论证中推断出来。你可以这样做:

System.Data.Entity.Database.SetInitializer(new ContextInitializer());

...假设您首先使用声明解决问题。