Không thể tìm thấy tên loại hoặc không gian tên 'DbContext' [đã đóng]


150

Tôi rất mới với ASP.NET MVC (3) và đang gặp khó khăn trong việc khắc phục lỗi xây dựng trong Visual Studio:

Không thể tìm thấy tên loại hoặc không gian tên 'DbContext' (bạn có thiếu chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)

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; }
    }
}

Hai lỗi tôi đang mắc phải là:

  • Không thể tìm thấy tên loại hoặc không gian tên 'DbContext' (bạn có thiếu chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)
  • Không thể tìm thấy tên loại hoặc không gian tên 'Dbset' (bạn có thiếu chỉ thị sử dụng hoặc tham chiếu lắp ráp không?)

Tôi đang thiếu gì?


20
Bạn đã thêm tham chiếu Mã thực thể đầu tiên bằng NuGet chưa? Đó có thể là cách dễ nhất để giải quyết các tài liệu tham khảo.
Nhà nguyện Ed

2
ok - trong Solution Explorer Tree Tôi đã nhấp chuột phải vào Tài liệu tham khảo -> Thêm tham chiếu gói thư viện -> EFCodeFirst -> Cài đặt. Đây có phải là những gì bạn đã đề nghị? Sau khi làm theo các bước này tôi vẫn gặp vấn đề tương tự.
Chris

Trong khi đó, tôi đã cập nhật Công cụ MVC 3 lên phiên bản mới nhất và tạo một dự án hướng dẫn theo asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs . Trong dự án đó, tôi không gặp phải vấn đề này, nhưng tôi không thể chấp nhận DbContext trong dự án cũ của mình, bất chấp những đề xuất được đưa ra ở đây và bởi Darin bên dưới ...
Chris

VS2017, EF6, Đóng giải pháp. Mở lại giải pháp. Bây giờ nó nhận ra đúng DbContext.
redwards510

1
Mở Bảng điều khiển quản lý gói. Chọn Công cụ> Trình quản lý gói NuGet> Bảng điều khiển Trình quản lý gói. Trong Bảng điều khiển quản lý gói, nhập lệnh sau: gói cài đặt EntityFramework
Zahid Hasan

Câu trả lời:


200

Tôi gặp vấn đề tương tự. Hóa ra, bạn cần tham chiếu EntityFramework.dll (chứ không phải System.Data.Entity).

Tôi vừa lấy nó từ ứng dụng MvcMusicStore mà bạn có thể tải xuống từ: http://mvcmusicstore.codeplex.com/

Đây cũng là một ví dụ hữu ích về cách sử dụng mã khung thực thể trước tiên với MVC.


7
đây là kinh nghiệm của tôi; EntityFramework.dll cho 4.2.0.0 không có mặt mặc dù Trình quản lý gói vs2010 tuyên bố tôi đã cài đặt 4.2.0.0. Với dự án của tôi mở trong vs2010, chạy lệnh cài đặt thông qua Công cụ, Trình quản lý gói thư viện, Bảng điều khiển quản lý gói đã tự động thêm tham chiếu vào EntityFramework và quá trình xây dựng tiếp theo của tôi đã thành công. thnx @Shahzad!
gerryLowry

7
Cảm ơn bạn đã giúp đỡ. Tôi hy vọng một ngày nào đó Microsoft sẽ giúp việc cài đặt phần mềm của họ trên windows dễ dàng hơn! Thật đáng kinh ngạc có bao nhiêu nơi người ta phải đi để tìm ra những gì cần thiết và làm thế nào tất cả chúng phù hợp với nhau. NuGet, MS Tải trang web, Bảng tin, sách, .... thời gian thực sự hiệu quả.
NoChance

23
Đặt cược tốt nhất của bạn là sử dụng NuGet (trình quản lý gói) để kéo Entity Framework (et al) vào các dự án của bạn.
kingdango

2
đôi khi bạn cần khởi động lại visual studio để cài đặt hoạt động. đây là trường hợp của tôi
Bedouin

3
Mở Bảng điều khiển Trình quản lý gói và dán vào: Cài đặt-Gói
EntityFramework

71

Bạn cần tham khảo System.Data.Entityassebmly cho dự án của bạn hoặc cài đặt EntityFrameworkgói NuGet sẽ thiết lập mọi thứ cho bạn.


1
Darin, bạn có thể giải thích làm thế nào một người sẽ làm điều này?
Chris

11
@Chris Dickinson, nhấp chuột phải vào Referencesmục trong dự án và chọn Add Reference.... Sau đó trong .NETtab, chọn System.Data.Entity. Và nếu bạn muốn sử dụng NuGet, nhấp chuột phải vào Referencesmục và sau đó chọn Add Library Package Reference...và trong tab Trực tuyến, tìm kiếm EntityFramework.
Darin Dimitrov

1
Tôi đã làm theo cả hai bước của bạn, nhưng vấn đề vẫn còn tồn tại ...
Chris

3
Bạn có sử dụng NuGet để cài đặt EntityFramework không? Nó tạo ra một "gói" thư mục bên cạnh thư mục Solution của bạn. Bạn sẽ tìm thấy thư mục "EntityFramework.4.1.10331.0" bên trong nó. Trong thư mục "Libs" bạn sẽ tìm thấy "EntityFramework.dll". Tham khảo thêm bằng tab Duyệt và chọn dll ở trên. xem câu trả lời của tôi dưới đây .. tôi đã làm như vậy.
Amitd

7
Tôi đã chọn TOOLS > Library Package Manager > Package Manager Consoletrong VS2012 và gõ install-package EntityFrameworkvào dấu nhắc. Làm việc hoàn hảo.
Peter Gluck

17

Chỉ là một ghi chú nhanh. Đó là DbContext, không phải DBContext. tức là với chữ thường 'B'. Tôi phát hiện ra điều này bởi vì tôi có cùng một vấn đề trong khi inteleense không hoạt động cho đến khi tôi thử gõ không gian tên đầy đủ System.Data.Entity ... và tên và cuối cùng nó gợi ý tùy chọn 'b' chữ thường: -

System.Data.Entity.DbContext


1
Tôi đã xem qua tất cả các tài liệu tham khảo về System.Data.Entity chỉ để phát hiện ra rằng vấn đề là chữ hoa "B". +1
F0r3v3r-A-N00b

Có điều này đã giải quyết nó. Đã cung cấp bước "Cài đặt-Gói EntityFramework". Cảm ơn, +1.
Paceman

9

Tôi đã có cùng một vấn đề khi sử dụng VS2010. Tôi biết đây không thực sự là một câu trả lời. Tôi chỉ nghĩ rằng nó có thể giúp ai đó. Tôi đã giải quyết nó bằng cách sử dụng tên đủ điều kiện cho DBContext.

Thay vì

public class MachineDbContext : DbContext

Tôi đã sử dụng

public class MachineDbContext : System.Data.Entity.DbContext

và xây dựng lại dự án. Đột nhiên VS rất vui, và tôi thậm chí có thể xóa tên đủ điều kiện và chỉ cần sử dụng DBContext.


tên đủ điều kiện ... làm thế nào v có thể quên thêm bằng cách sử dụng chỉ thị ....
x-code

8

Tôi gặp vấn đề tương tự ... Cài đặt EF từ Bảng điều khiển quản lý gói hoạt động với tôi

lệnh là: Install-Package EntityFramework


4

Nếu trình biên dịch của bạn không nhận ra

  • System.Data.Entity.Infr Hạ tầng
  • DbContext
  • Dbset
  • et alii,

bảo đảm

  1. bạn đã cài đặt Entity Framework 4.1 trên máy của mình;
  2. trong tệp .csproj của bạn, bạn có tài liệu tham khảo sau

    <Bao gồm tài liệu tham khảo = "EntityFramework, Version = 4.1.0.0, Culture = trung tính, PublicKeyToken = b77a5c561934e089, bộ xử lýArch architecture = MSIL" />
    

    trong phần tử

    <Itemgroup>
      ...
    </ Itemgroup>
    

    nhà đó tham chiếu đến các hội đồng khác.


4

Tôi đã có cùng một vấn đề..Tôi có VS2010 express ..

(Lưu ý: Nếu bạn thấy vấn đề này, hãy thử kiểm tra các tham chiếu đến EntityFramework.dll .. Có thể nó bị thiếu.)

Sau đây giải quyết nó cho tôi.

Tôi đã cài đặt Cập nhật công cụ MVC 3 mới nhất
sau đó tôi đã cài đặt EntityFramework 4.1
hoặc sử dụng NUGet tức là. từ với Visual Studio 2010 Express (Công cụ-> Trình quản lý gói thư viện -> Thêm tham chiếu Gói thư viện -> Chọn trực tuyến -> EntityFramework)

Thật kỳ lạ là nó không hoạt động..Vậy tôi phải tự thêm một tham chiếu vào "EntityFramework.dll"
hãy thử tìm kiếm dll ..may ở đây
"C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ "

Nếu bạn đã có nó..chỉ cần thêm một tham chiếu '.net'.

Lưu ý: Nếu bạn sử dụng NuGet, nó sẽ tạo một "gói" thư mục dọc theo thư mục Giải pháp của bạn. Bạn sẽ tìm thấy thư mục "EntityFramework.4.1.10331.0" bên trong nó. Trong thư mục "Libs" bạn sẽ tìm thấy "EntityFramework.dll".
Thêm tham chiếu đến nó bằng cách sử dụng tab Duyệt và chọn dll ở trên.

Chụp cho giống


4

Tôi đang sử dụng Visual Studio 2010 express và thêm một tài liệu tham khảo để C:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllgiải quyết vấn đề.


4

Điều này giúp thực sự tiện dụng:

  1. Chọn dự án ProjectNAme trong Solution Explorer.
  2. Từ Menu Công cụ, chọn Trình quản lý Gói Thư viện có menu phụ.
  3. Từ menu phụ chọn Gói quản lý bảng điều khiển.
  4. Tại dấu nhắc PM của giao diện điều khiển, hãy cài đặt EntityFramework, sau đó nhấn enter.


3

Dự án của bạn không thể giải quyết các lớp EntityFramework cho đến khi bạn không thêm nó vào dự án của mình. Để thêm hỗ trợ EntityFramework, bạn phải làm theo các bước sau: Công cụ-> Trình quản lý gói Nuget -> Quản lý gói Nuget để duyệt giải pháp EntityFramework Nó hiển thị phiên bản EntityFramework ổn định mới nhất. Hiện tại 6.1.3 là phiên bản mới nhất Cài đặt nó cho dự án đã chọn.



2

Visual Studio Express SP1 Nhấp chuột phải vào Solution Explorer> Tài liệu tham khảo> Thêm tài liệu tham khảo gói thư viện> EntityFramework


2

Sử dụng CTP5 thay vào đó là phiên bản mới hơn với một số thay đổi trong API. Bạn phải thêm tham chiếu đến EntityFramework.dll được cài đặt trong thư mục CTP - mặc định là: c: \ Program Files \ Microsoft ADO.NET Tính năng khung thực thể CTP5 \ Binaries \ EntityFramework.dll cho hệ thống 32 bit. Trên hệ thống 64 bit, nó sẽ được đặt trong Tệp chương trình (x86).


2

Điều này xảy ra với tôi khi tôi phân nhánh mã. Để khắc phục, tôi nhấp chuột phải vào dự án của mình trong Visual Studio, chọn quản lý các gói Nu-get, gỡ cài đặt EntityFramework, sau đó cài đặt lại. Vấn đề được giải quyết


2

Tôi chỉ có vấn đề này và không có giải pháp nào khác làm việc cho tôi. Tôi đang sử dụng Visual Studio 2010 và tôi có hai dự án trong giải pháp của mình: UIProject và DataAccessProject. UIProject có tham chiếu đến DataAccessProject.

UIProject của tôi đã nhắm mục tiêu .Net Framework 4 nhưng DataAccessProject của tôi đã nhắm mục tiêu .Net Framework 3.5 vì một số lý do.

  • Tôi đã thay đổi cả hai dự án để nhắm mục tiêu .Net Framework 4
  • Gỡ cài đặt sau đó cài đặt lại Gói NuGet Entity.

Vấn đề được giải quyết. Bây giờ tôi có tham chiếu đến cả EntityFramework và System.Data.Entity


2

tôi đã có cùng một vấn đề. Tôi đã phải viết lại "DBContext" sau khi thêm tham chiếu vào thực thể và nó đã giải quyết vấn đề.
điều đó có nghĩa là Visual studio không thể tự động nhận ra lớp và chờ đợi nó được gõ lại. Vì vậy, tốt nhất của bạn để thêm tài liệu tham khảo đầu tiên và sau đó thực hiện mã. VS 2013 - sử dụng cuối cùng


2

Trước tiên tôi phải gỡ cài đặt EntityFramework (Gỡ cài đặt EntityFramework (không phân biệt chữ hoa chữ thường), sau đó cài đặt lại (Cài đặt gói EntityFramework), thông qua Bảng điều khiển PM


1

Tôi đã có vấn đề này, đọc câu trả lời ở trên và tải xuống entityframework.ddl nhưng thấy rằng nó được tham chiếu alreadt. Vì vậy, tôi đã thêm không gian tên và vấn đề đã được giải quyết

sử dụng System.Data.Entity;

Tôi đang sử dụng Visual Studio 2010, SP1 được cài đặt


1

đã tham chiếu entityframework.dll cả system.data.entity đều hoạt động.


1

Tôi đã có cùng một lỗi nhưng vấn đề chỉ là một vấn đề tình cờ với mô hình của tôi.

Tôi vô tình đặt ...

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

... Bên trong lớp người mẫu.


1
3 dòng đó thực sự bên trong lớp học?
Nate-Wilkins

1

Cách khác là bạn có thể đi TẠI ĐÂY - hướng dẫn cách cài đặt bất kỳ dll cần thiết nào.

Hoặc bạn có thể tải xuống NuGet và quản lý nó từ VS


1

Nhấp chuột phải vào tài liệu tham khảo của bạn và đi đến quản lý các gói NuGet, sau đó chọn tất cả trực tuyến, sau đó nguồn gói NuGet trong hộp văn bản tìm kiếm loại Entity Framework và cài đặt nó.


1

1) Gỡ cài đặt Entity Framework khỏi tất cả các dự án

2) Khởi động lại Visual Studio

3) Cài đặt lại cho tất cả các dự án cần thiết

nó bắt đầu làm việc


1

Có thể có trường hợp bạn tham chiếu mọi thứ bạn cần và thậm chí bạn có thể Chuyển đến Định nghĩa bằng cách nhấn F12 trên lớp DbContext sẽ đưa bạn đến không gian tên System.Data.Entity nhưng bạn vẫn nhận được cảnh báo trình biên dịch khó chịu này. Đảm bảo rằng Khung mục tiêu của dự án của bạn và của phiên bản Entity Framework mà bạn đang sử dụng khớp. Chuyển đến Project-> Properties-> Tab ứng dụng. Thay đổi Khung mục tiêu (không thể nói chính xác cái nào, bản dùng thử và lỗi sẽ giúp ích.). Chỉ hai xu của tôi.


1

Tôi cũng bị kích thích từ vấn đề này nhiều lần và cuối cùng tìm ra giải pháp. Chuyển đến tập tin edmx-> Mô hình cập nhật từ cơ sở dữ liệu-> Làm mới-> Kết thúc. Giải pháp sạch-> Giải pháp xây dựng lại


0

bạn có thể thử trên bảng điều khiển quản lý gói

PM> EntityFrameWork \ enable-di chuyển


0

Giống như những người khác đã đề xuất:

  1. Thêm các tài liệu tham khảo và chỉ thị chính xác. Nhưng nó vẫn không hoạt động? Có thể bạn có cùng một vấn đề tôi đã làm:

Có một cái nhìn bên dưới và xem nếu bạn có thể cho tôi biết những gì sai:

public class PanelLengthContext : DBContext { } ??

Đảm bảo tên lớp không bị sai - (phân biệt chữ hoa chữ thường)!

  • DbContext là cách viết đúng.
  • Đây là cách nó sẽ trông:
  • kiểm tra chính tả. đừng lãng phí 20 phút cuộc sống của bạn như tôi đã làm.public class PanelLengthContext : DbContext {}

HTH


0

Tôi có cùng một vấn đề với bạn, tôi không thể triển khai nó trong lớp Trình điều khiển trong khi nó hoạt động khi tôi đặt nó trong lớp mô hình. Thêm các mã này vào đầu lớp trình điều khiển của bạn

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

0

Tôi đã phải đối mặt với cùng một vấn đề và sau đó tôi đã thêm không gian tên

using Practiceusingentityframework.Models;

Sau khi thêm nó hoạt động tốt

Hãy thử điều này có thể giúp bạn giải quyết vấn đề của bạn

và trước đó cài đặt khung thực thể từ Trình quản lý Nuget

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.