EF 4.1 RC - 'System.Data.Entity.IDatabaseInitializer`1 [TContext]' нарушает ограничение параметра типа 'TContext' - PullRequest
1 голос
/ 25 марта 2011

Я только что обновил свой проект (используя NuGet) до Entity Framework 4.1 RC и получил эту ошибку:

GenericArguments [0], 'Notesnhac.Library.NotesnhacContext', в 'Система.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 (container));Строка 115: #endregion Строка 116:} Строка 117:} Строка 118:}

Исходный файл: C: \ projects \ Kenny Projects \ 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 Projects \ Notesnhac \ Notesnhac.Site \ Global.asax.cs: 116

Информация о версии: Microsoft.Версия NET Framework: 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 Ответ

3 голосов
/ 25 марта 2011

Кажется, что проблема в строке:

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

Общий параметр TContext равен , который должен быть подтипом DbContext .И ваша стратегия должна реализовывать IDatabaseInitializer.

Вы не показываете объявление NotesnhacContext, но компилятор говорит, что один из них отсутствует.

Не нужно указыватьпараметр типа вообще;это будет выведено из аргумента.Вы можете просто сделать:

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

... при условии, что вы сначала исправите проблему с помощью объявления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...