Не удалось найти тип или имя пространства имен 'DbContext' [закрыто]


150

Я ОЧЕНЬ новичок в ASP.NET MVC (3) и мне трудно разрешить ошибку сборки в Visual Studio:

Не удалось найти тип или имя пространства имен 'DbContext' (отсутствует директива using или ссылка на сборку?)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;

namespace MyProjectName.Models
{   
    public class MachineModel
    {
        // name
        [Required]
        [Display(Name = "Nom de la machine")]
        public string Name { get; set; }

        // IP
        [Required]
        [RegularExpression(@"(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",
           ErrorMessage = "Donnez une adresse IPv4 valide.")]
        [Display(Name = "Adresse IP de la machine")]
        public string IP { get; set; }
    }

    public class MachineDbContext : DbContext
    {
        public DbSet<MachineModel> Machines{ get; set; }
    }
}

Я получаю две ошибки:

  • Не удалось найти тип или имя пространства имен 'DbContext' (отсутствует директива using или ссылка на сборку?)
  • Не удалось найти тип или имя пространства имен 'DbSet' (отсутствует директива using или ссылка на сборку?)

Чего мне не хватает?


20
Добавили ли вы ссылку Entity Framework Code First, используя NuGet? Это может быть самый простой способ разрешить ссылки.
Эд Чапел

2
хорошо - в дереве обозревателя решений я щелкнул правой кнопкой мыши по ссылке -> Добавить ссылку на пакет библиотеки -> EFCodeFirst -> Установить. Это то, что вы предлагали? После выполнения этих шагов у меня все еще остается та же проблема.
Крис

Тем временем я обновил MVC 3 Tools до последней версии и создал учебный проект по адресу asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . В этом проекте у меня нет этой проблемы, но я не могу принять DbContext в моем старом проекте, несмотря на предложения, сделанные здесь и Дарином ниже ...
Крис

VS2017, EF6, Закрыть решение. Откройте решение. Теперь он правильно распознает DbContext.
redwards510

1
Откройте консоль диспетчера пакетов. Выберите Инструменты> Диспетчер пакетов NuGet> Консоль диспетчера пакетов. В консоли диспетчера пакетов введите следующую команду: install-package EntityFramework
Захид Хасан,

Ответы:


200

Я была такая же проблема. Оказывается, вам нужна ссылка EntityFramework.dll (а не System.Data.Entity).

Я только что вытащил его из приложения MvcMusicStore, которое вы можете загрузить с: http://mvcmusicstore.codeplex.com/

Это также полезный пример того, как использовать первоочередную структуру кода с MVC.


7
это был мой опыт; EntityFramework.dll для 4.2.0.0 отсутствовал, хотя диспетчер пакетов vs2010 утверждал, что у меня установлена ​​4.2.0.0. С моим проектом, открытым в vs2010, запустив команду установки через Инструменты, Диспетчер пакетов библиотеки, Консоль диспетчера пакетов автоматически добавила ссылку на EntityFramework, и моя последующая сборка прошла успешно. спасибо @ Shahzad!
gerryLowry

7
Спасибо за вашу помощь. Я надеюсь, что Microsoft однажды упростит установку собственного программного обеспечения на своих окнах! Удивительно, сколько мест нужно посетить, чтобы понять, что нужно, и как они все сочетаются друг с другом. NuGet, MS Сайт для скачивания, Доски объявлений, книги ... действительно очень продуктивное время.
NoChance

23
Лучше всего использовать NuGet (менеджер пакетов), чтобы использовать Entity Framework (и другие) в своих проектах.
кингданго

2
несколько раз вам нужно перезапустить visual studio, чтобы сделать установку. это был мой случай.
бедуин,

3
Откройте консоль диспетчера пакетов и вставьте в нее: Install-Package EntityFramework
user2862542

71

Вам нужно сослаться на System.Data.Entityсборку для вашего проекта или установить EntityFrameworkпакет NuGet, который настроит все для вас.


1
Дарин, не могли бы вы объяснить, как это сделать?
Крис

11
@ Крис Дикинсон, щелкните правой кнопкой мыши на Referencesэлементе в проекте и выберите Add Reference.... Затем на .NETвкладке выберите System.Data.Entity. А если вы хотите использовать NuGet, щелкните правой кнопкой мыши на Referencesэлементе, а затем выберите Add Library Package Reference...и на вкладке Онлайн найдите EntityFramework.
Дарин Димитров

1
Я следовал за обоими твоими шагами, но проблема все еще сохраняется ...
Крис

3
Вы использовали NuGet для установки EntityFramework? Он создает папку "packages" рядом с вашей директорией Solution. В ней вы найдете папку «EntityFramework.4.1.10331.0». Внутри папки «Libs» вы найдете «EntityFramework.dll». Добавьте ссылку на нее с помощью вкладки «Обзор» и выберите вышеупомянутую DLL. см. мой ответ ниже .. я сделал то же самое.
Принесено

7
Я выбрал TOOLS > Library Package Manager > Package Manager Consoleв VS2012 и набрал в командной install-package EntityFrameworkстроке. Работал отлично.
Питер Глюк

17

Просто быстрая заметка. Это DbContext, а не DBContext. то есть с строчной буквой «B». Я обнаружил это, потому что у меня была та же проблема, в то время как intelesense не работал, пока я не попытался ввести полное пространство имен System.Data.Entity ... и имя, и, наконец, он предложил вариант «b» в нижнем регистре: -

System.Data.Entity.DbContext


1
Я просматривал все ссылки, касающиеся System.Data.Entity, только чтобы обнаружить, что проблема заключалась в прописной букве «B». +1
F0r3v3r-A-N00b

Да, это решило это. Предоставленный шаг «Install-Package EntityFramework» выполнен. Спасибо, +1.
Paceman

9

У меня была такая же проблема с использованием VS2010. Я знаю, что это не совсем ответ. Я просто подумал, что это может кому-то помочь. Я решил это, используя полное имя для DBContext.

Вместо того

public class MachineDbContext : DbContext

я использовал

public class MachineDbContext : System.Data.Entity.DbContext

и перестроил проект. Внезапно VS был счастлив, и я даже смог удалить полное имя и просто использовать DBContext.


полное имя ... как можно забыть добавить с помощью директивы ....
x-code

8

У меня была такая же проблема ... Установка EF из консоли диспетчера пакетов работала для меня

команда была: Install-Package EntityFramework


4

Если ваш компилятор не распознает

  • System.Data.Entity.Infrastructure
  • DbContext
  • DbSet
  • и др.,

удостовериться

  1. у вас установлен Entity Framework 4.1 на вашем компьютере;
  2. в вашем файле .csproj у вас есть следующая ссылка

    <Reference Include = "EntityFramework, версия = 4.1.0.0, культура = нейтральная, PublicKeyToken = b77a5c561934e089, processorArchitecture = MSIL" />
    

    внутри элемента

    <ItemGroup>
      ...
    </ ItemGroup>
    

    в котором хранятся ссылки на другие сборки.


4

У меня была такая же проблема .. У меня VS2010 экспресс ..

(Примечание: если вы видите эту проблему, попробуйте проверить ссылки на EntityFramework.dll .. Может быть, она отсутствует.)

Следующее решило это для меня.

Я установил последнее обновление MVC 3 Tools,
затем я установил EntityFramework 4.1
или с помощью NUGet, т.е. с помощью Visual Studio 2010 Express (Инструменты-> Диспетчер пакетов библиотеки -> Добавить ссылку на пакет библиотеки -> Выбрать онлайн -> EntityFramework)

Странно, что это не сработало ... Так что мне пришлось вручную добавить ссылку на "EntityFramework.dll",
попробуйте выполнить поиск для DLL .. может быть здесь
"C: \ Program Files (x86) \ Ссылочные сборки \ Microsoft \ Framework.NETFramework \ v4.0 \»

Если он у вас уже есть ... просто добавьте ссылку .net.

Примечание. Если вы используете NuGet, он создает папку «packages» рядом с вашим каталогом Solution. В ней вы найдете папку «EntityFramework.4.1.10331.0». В папке «Libs» вы найдете «EntityFramework.dll».
Добавьте ссылку на него с помощью вкладки «Обзор» и выберите вышеупомянутую DLL.

Snap для того же


4

Я использую Visual Studio 2010 Express и добавляю ссылку, чтобы C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllрешить проблему.


4

Это помогает очень удобно:

  1. Выберите проект ProjectNAme в обозревателе решений.
  2. В меню «Инструменты» выберите «Диспетчер пакетов библиотеки», в котором есть подменю.
  3. В подменю выберите Консоль диспетчера пакетов.
  4. В командной строке консоли PM введите install-package EntityFramework и нажмите Enter.


3

Ваш проект не может разрешить классы EntityFramework, пока вы не добавите его в свой проект. Для добавления поддержки EntityFramework необходимо выполнить следующие действия: Инструменты-> Диспетчер пакетов Nuget -> Управление пакетом Nuget для решения. EntityFramework Показывает последнюю стабильную версию EntityFramework. в настоящее время 6.1.3 является последней версией. Установите его для выбранного проекта.



2

Visual Studio Express SP1 Щелкните правой кнопкой мыши в обозревателе решений> Ссылки> Добавить ссылку на пакет библиотеки> EntityFramework


2

Вместо этого используйте CTP5 - это более новая версия с некоторыми изменениями в API. Вы должны добавить ссылку на EntityFramework.dll, которая установлена ​​в каталоге CTP - по умолчанию: c: \ Program Files \ Microsoft ADO.NET Entity Framework Feature CTP5 \ Binaries \ EntityFramework.dll для 32-битной системы. На 64-битной системе он будет помещен в Program Files (x86).


2

Это случилось со мной, когда я разветвил код. Чтобы исправить это, я щелкнул правой кнопкой мыши свой проект в Visual Studio, выбрал управление пакетами Nu-get, удалил EntityFramework, а затем переустановил его. Задача решена


2

У меня просто была эта проблема, и ни одно из других решений не помогло мне. Я использую Visual Studio 2010, и у меня есть два проекта в моем решении: UIProject и DataAccessProject. UIProject имеет ссылку на DataAccessProject.

Мой UIProject был нацелен на .Net Framework 4, но мой DataAccessProject был нацелен на .Net Framework 3.5 по некоторым причинам.

  • Я изменил оба проекта на целевой .Net Framework 4
  • Деинсталлируется и переустанавливает пакет NuGet Entity Framework.

Проблемы решены. Теперь у меня есть ссылки на EntityFramework и System.Data.Entity.


2

У меня была такая же проблема. Мне пришлось переписать «DBContext» после добавления ссылки на entityframework, и это решило проблему.
это означает, что Visual studio не смогла автоматически распознать класс и ждала его повторного набора. поэтому лучше сначала добавить ссылку, а затем реализовать код. VS 2013 - последний использованный


2

Мне пришлось сначала удалить EntityFramework (пакет деинсталляции EntityFramework (очевидно, без учета регистра)), а затем установить его снова (Install-package EntityFramework) через консоль PM


1

У меня возникла эта проблема, прочитайте приведенный выше ответ и загрузите entityframework.ddl, но обнаружил, что на него ссылаются alreadt. Поэтому я добавил пространство имен, и проблема была решена

использование System.Data.Entity;

Я использую Visual Studio 2010, SP1 установлен


1

сославшись на entityframework.dll, оба system.data.entity работали.


1

У меня была та же ошибка, но проблема была просто случайной проблемой с моей моделью.

Я случайно положил ...

public class MyModelDBContext : Context
{
 public DBSet<MyModel> MyModels { get; set; }
}

... внутри класса модели.


1
Эти 3 строки на самом деле внутри класса?
Нейт-Уилкинс

1

В качестве альтернативного пути вы можете пойти ЗДЕСЬ - инструкция, как установить любую необходимую DLL.

Или вы можете скачать NuGet и управлять им из VS


1

Щелкните правой кнопкой мыши по ссылке и перейдите к управлению пакетами NuGet, затем выберите онлайн все, затем источник пакета NuGet в текстовом поле поиска введите Entity Framework и установите его.


1

1) Удаление Entity Framework из всех проектов

2) Перезапустите Visual Studio.

3) Переустановка на все необходимые проекты

и это начало работать


1

В некоторых случаях вы можете ссылаться на все, что вам нужно, и вы даже можете перейти к определению, нажав F12 в классе DbContext, который приведет вас в пространство имен System.Data.Entity, но вы все равно получите это неприятное предупреждение компилятора. Убедитесь, что Target Framework вашего проекта и версия Entity Framework, которую вы используете, совпадают. Перейдите в Project-> Properties-> Tab приложения. Измените Target Framework (не могу точно сказать, какой из них поможет методом проб и ошибок). Просто мои два цента.


1

Я также раздражался от этой проблемы много раз и, наконец, нашел решение. Перейдите в файл edmx-> Обновить модель из базы данных-> Обновить-> Готово. Чистое решение-> Восстановить решение



0

Как и другие предложили:

  1. Добавьте правильные ссылки и директивы. Но это все еще не работает? Может быть, у вас та же проблема, что и я:

Посмотрите ниже и посмотрите, можете ли вы сказать мне, что не так:

public class PanelLengthContext : DBContext { } ??!

Убедитесь, что имя класса не написано с ошибкой - (чувствительность к регистру)!

  • DbContext это правильное написание.
  • вот как это должно выглядеть:
  • проверить орфографию не трать 20 минут своей жизни, как я.public class PanelLengthContext : DbContext {}

НТН


0

У меня та же проблема, что и у вас, я не могу реализовать ее в классе Controller, пока она работает, когда я помещаю ее в класс модели. Добавьте эти коды в верхней части вашего класса контроллера

 using TimeSheetManagementSystem.Data;
 using Microsoft.Extensions.Configuration;
 using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
 using Microsoft.EntityFrameworkCore;
 using Newtonsoft.Json;

0

Я столкнулся с той же проблемой, а затем я добавил пространство имен

using Practiceusingentityframework.Models;

После добавления работает нормально

Попробуйте это может помочь вам решить вашу проблему

и перед этим установите платформу сущностей из Nuget Manager

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.