ไม่พบประเภทหรือชื่อเนมสเปซ 'DbContext' [ปิด]


150

ฉันใหม่มากกับ ASP.NET MVC (3) และมีเวลายากในการแก้ไขข้อผิดพลาดในการสร้างใน Visual Studio:

ไม่พบประเภทหรือชื่อเนมสเปซ 'DbContext' (คุณพลาดการใช้คำสั่งหรือการอ้างอิงแอสเซมบลีหรือไม่)

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' (คุณพลาดการใช้คำสั่งหรือการอ้างอิงแอสเซมบลีหรือไม่)
  • ไม่พบประเภทหรือชื่อเนมสเปซ 'DbSet' (คุณพลาดการใช้คำสั่งหรือการอ้างอิงแอสเซมบลีหรือไม่)

ฉันพลาดอะไรไป


20
คุณเพิ่มรหัสอ้างอิงเอนทิตีกรอบการทำงานครั้งแรกโดยใช้ NuGet หรือไม่ นั่นอาจเป็นวิธีที่ง่ายที่สุดในการแก้ไขปัญหาการอ้างอิง
Ed Chapel

2
ok - ใต้ Solution Explorer Tree ฉันคลิกขวาที่อ้างอิง -> เพิ่มการอ้างอิงแพ็คเกจไลบรารี -> EFCodeFirst -> ติดตั้ง นี่คือสิ่งที่คุณแนะนำหรือไม่ หลังจากทำตามขั้นตอนเหล่านี้ฉันยังคงมีปัญหาเดียวกัน
Chris

ฉันมีการปรับปรุงในขณะเดียวกัน MVC 3 เครื่องมือรุ่นใหม่ล่าสุดและสร้างโครงการกวดวิชาดังต่อไปนี้asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs ในโครงการนั้นฉันไม่มีปัญหานี้ แต่ฉันไม่สามารถรับ DbContext ให้เป็นที่ยอมรับในโครงการรุ่นเก่าของฉันแม้จะมีคำแนะนำที่นี่และโดยดารินด้านล่าง ...
Chris

VS2017, EF6, ปิดโซลูชัน เปิดโซลูชันอีกครั้ง ตอนนี้รู้จัก DbContext อย่างถูกต้อง
redwards510

1
เปิดคอนโซลตัวจัดการแพคเกจ เลือกเครื่องมือ> ตัวจัดการแพ็คเกจ NuGet> คอนโซลตัวจัดการแพคเกจ ในคอนโซลตัวจัดการแพคเกจป้อนคำสั่งต่อไปนี้: install-package EntityFramework
Zahid Hasan

คำตอบ:


200

ฉันมีปัญหาเดียวกัน ปรากฎว่าคุณต้องมีการอ้างอิง EntityFramework.dll (ไม่ใช่ System.Data.Entity)

ฉันเพิ่งดึงมันจากแอปพลิเคชั่น MvcMusicStore ซึ่งคุณสามารถดาวน์โหลดได้จาก: http://mvcmusicstore.codeplex.com/

นอกจากนี้ยังเป็นตัวอย่างที่มีประโยชน์เกี่ยวกับวิธีใช้เอนทิตีเฟรมเวิร์กโค้ด - ครั้งแรกกับ MVC


7
นี่คือประสบการณ์ของฉัน; EntityFramework.dll สำหรับ 4.2.0.0 ไม่มีอยู่แม้ว่า vs2010 Package Manager อ้างว่าฉันมี 4.2.0.0 ติดตั้งอยู่ เมื่อเปิดโครงการของฉันใน vs2010 การรันคำสั่งการติดตั้งผ่านเครื่องมือ Library Package Manager คอนโซล Package Manager เพิ่มการอ้างอิงไปยังEntityFrameworkโดยอัตโนมัติและการสร้างครั้งต่อไปของฉันสำเร็จ ขอบคุณ @Shahzad!
gerryLowry

7
ขอบคุณสำหรับความช่วยเหลือของคุณ. ฉันหวังว่า Microsoft วันหนึ่งจะทำให้การติดตั้งซอฟต์แวร์ของตนเองบน windows ของพวกเขาง่ายขึ้น! เป็นที่น่าอัศจรรย์ว่ามีหลายแห่งที่ต้องไปเพื่อค้นหาสิ่งที่จำเป็นและวิธีที่พวกเขาเข้ากันได้ดี NuGet, เว็บไซต์ดาวน์โหลดของ MS, กระดานข้อความ, หนังสือ, .... ใช้เวลาในการผลิตอย่างมากแน่นอน
NoChance

23
ทางออกที่ดีที่สุดของคุณคือใช้ NuGet (ผู้จัดการบรรจุภัณฑ์) เพื่อดึง Entity Framework (et al) ในโครงการของคุณ
kingdango

2
บางครั้งคุณจำเป็นต้องรีสตาร์ท Visual Studio เพื่อให้การติดตั้งใช้งานได้ นี่เป็นกรณีของฉัน
เบดูอิน

3
เปิดคอนโซลตัวจัดการแพคเกจและวางใน: การติดตั้งแพคเกจ EntityFramework
2862542

71

คุณต้องอ้างอิงSystem.Data.Entityassebmly กับโครงการของคุณหรือติดตั้งEntityFrameworkแพคเกจ NuGet ซึ่งจะตั้งค่าทุกอย่างให้คุณ


1
ดารินคุณช่วยอธิบายได้มั้ย
Chris

11
@ Chris ดิกคินสัน, คลิกขวาที่รายการในโครงการและเลือกReferences Add Reference...จากนั้นในแท็บการเลือก.NET System.Data.Entityและถ้าคุณต้องการที่จะใช้ NuGet, คลิกขวาที่Referencesรายการแล้วเลือกและในออนไลน์แท็บค้นหาAdd Library Package Reference... EntityFramework
ดารินทร์ดิมิทรอฟ

1
ผมทำตามทั้งสองขั้นตอนของคุณ แต่ยังคงมีปัญหายังคง ...
คริส

3
คุณใช้ NuGet เพื่อติดตั้ง EntityFramework หรือไม่มันสร้างโฟลเดอร์ "แพ็คเกจ" ข้างไดเรกทอรีโซลูชันของคุณ คุณจะพบโฟลเดอร์ "EntityFramework.4.1.10331.0" ข้างในนั้นภายในโฟลเดอร์ "Libs" คุณจะพบ "EntityFramework.dll" เพิ่มการอ้างอิงถึงโดยใช้แท็บเรียกดูแล้วเลือก dll ด้านบน ดูคำตอบของฉันด้านล่าง .. ฉันทำเช่นเดียวกัน
Amitd

7
ฉันเลือกTOOLS > Library Package Manager > Package Manager Consoleใน VS2012 และพิมพ์install-package EntityFrameworkที่พรอมต์ ทำงานได้อย่างสมบูรณ์แบบ
Peter Gluck

17

เพียงแค่บันทึกย่อ มันเป็น DbContext ไม่ใช่ DBContext เช่นด้วยตัวพิมพ์เล็ก 'B' ฉันค้นพบสิ่งนี้เพราะฉันมีปัญหาเดียวกันในขณะที่ intelesense ไม่ทำงานจนกว่าฉันจะลองพิมพ์ชื่อเต็ม System.Data.Entity พื้นที่ ... และชื่อและในที่สุดก็แนะนำตัวเลือก 'b' ตัวพิมพ์เล็ก: -

System.Data.Entity.DbContext


1
ฉันได้รับการอ้างอิงทั้งหมดที่เกี่ยวข้องกับ System.Data.Entity เพียงเพื่อค้นพบว่าปัญหาคือตัวพิมพ์ใหญ่ "B" +1
F0r3v3r-A-N00b

ใช่สิ่งนี้แก้ไขได้ ดำเนินการขั้นตอน "ติดตั้งแพ็กเกจ EntityFramework" แล้ว ขอบคุณ +1
Paceman

9

ฉันมีปัญหาเดียวกันกับการใช้ VS2010 ฉันรู้ว่านี่ไม่ใช่คำตอบจริงๆ ฉันแค่คิดว่ามันอาจช่วยใครบางคน ฉันแก้ไขมันโดยใช้ชื่อครบถ้วนสำหรับ DBContext

แทน

public class MachineDbContext : DbContext

ฉันใช้

public class MachineDbContext : System.Data.Entity.DbContext

และสร้างโครงการใหม่ ทันใดนั้น VS ก็มีความสุขและฉันก็สามารถลบชื่อที่มีคุณสมบัติครบถ้วนและเพียงแค่ใช้ DBContext


ชื่อที่ผ่านการรับรองโดยสมบูรณ์ ... จะลืมได้อย่างไรว่าจะเพิ่มโดยใช้คำสั่ง ....
x-code

8

ฉันมีปัญหาเดียวกัน ... การติดตั้ง EF จาก Package Manager Console นั้นเหมาะสำหรับฉัน

คำสั่งคือ: Install-Package EntityFramework


4

หากคอมไพเลอร์ของคุณไม่รู้จัก

  • System.Data.Entity.Infrastructure
  • DbContext
  • DbSet
  • et alii

ตรวจสอบให้แน่ใจ

  1. คุณได้ติดตั้ง Entity Framework 4.1 บนเครื่องของคุณ
  2. ในไฟล์. csproj ของคุณคุณมีการอ้างอิงดังต่อไปนี้

    <Reference Include = "EntityFramework, Version = 4.1.0.0, วัฒนธรรม = เป็นกลาง, PublicKeyToken = b77a5c561934e089, ตัวประมวลผลสถาปัตยกรรม = MSIL" />
    

    ภายในองค์ประกอบ

    <ItemGroup>
      ...
    </ ItemGroup>
    

    ที่บ้านอ้างอิงถึงการประกอบอื่น ๆ


4

ฉันมีปัญหาเดียวกัน .. ฉันมี VS2010 ด่วน ..

(หมายเหตุ: หากคุณเห็นปัญหานี้ลองตรวจสอบการอ้างอิงถึง EntityFramework.dll .. อาจหายไป)

ต่อไปนี้แก้ไขมันสำหรับฉัน

ฉันติดตั้งMVC 3 Tools Update ล่าสุด
จากนั้นฉันติดตั้งEntityFramework 4.1
หรือใช้ NUGet เช่น จากกับ Visual Studio 2010 Express (เครื่องมือ -> ตัวจัดการแพคเกจไลบรารี -> เพิ่มการอ้างอิงแพคเกจไลบรารี -> เลือกออนไลน์ -> EntityFramework)

แปลกที่ไม่ทำงาน .. ฉันต้องเพิ่มการอ้างอิงถึง "EntityFramework.dll" ด้วยตนเอง
ลองทำการค้นหา dll .. อาจมาที่นี่
"C: \ Program Files (x86) \ Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \"

หากคุณมีมัน .. เพียงเพิ่มการอ้างอิง '.net'

หมายเหตุ: ถ้าคุณใช้ NuGet มันจะสร้างโฟลเดอร์ "แพ็คเกจ" ข้างไดเรกทอรีโซลูชันของคุณ คุณจะพบโฟลเดอร์ "EntityFramework.4.1.10331.0" ข้างในนั้นภายในโฟลเดอร์ "Libs" คุณจะพบ "EntityFramework.dll"
เพิ่มการอ้างอิงโดยใช้แท็บเรียกดูแล้วเลือก dll ด้านบน

Snap สำหรับเดียวกัน


4

ฉันใช้ Visual Studio 2010 ด่วนและเพิ่มการอ้างอิงเพื่อC:\Program Files\Microsoft ADO.NET Entity Framework 4.1\Binaries\EntityFramework.dllแก้ไขปัญหา


4

สิ่งนี้มีประโยชน์จริง ๆ :

  1. เลือกโครงการ ProjectNAme ใน Solution Explorer
  2. จากเมนูเครื่องมือให้เลือก Library Package Manager ซึ่งมีเมนูย่อย
  3. จากเมนูย่อยเลือก Package Manager Console
  4. ที่ PM พรอมต์ของคอนโซลให้พิมพ์ตัวติดตั้งแพคเกจ EntityFramework แล้วกด Enter

3

สำหรับคำแนะนำทีละขั้นตอนดูชุดการสอน MVC / EF ใหม่นี้: http://www.asp.net/entity-framework/tutorials/creating-an-entity-framework-data-model-for-an-asp -net-mvc-application บทช่วยสอนถือว่าคุณได้ติดตั้งเครื่องมือ MVC 3 ล่าสุดและมีลิงก์ในกรณีที่คุณไม่ได้ติดตั้ง


3

โครงการของคุณไม่สามารถแก้ไขคลาส EntityFramework จนกว่าคุณจะไม่เพิ่มในโครงการของคุณ สำหรับการเพิ่มการสนับสนุน EntityFramework คุณต้องทำตามขั้นตอนนี้: เครื่องมือ -> ผู้จัดการแพคเกจ Nuget -> จัดการแพคเกจ Nuget สำหรับการแก้ปัญหาการเรียกดู EntityFramework มันแสดงรุ่น EntityFramework ที่มีเสถียรภาพล่าสุด ปัจจุบัน 6.1.3 เป็นรุ่นล่าสุดติดตั้งสำหรับโครงการที่เลือก



2

Visual Studio Express SP1 คลิกขวาในโซลูชัน Explorer> การอ้างอิง> เพิ่มการอ้างอิงแพคเกจไลบรารี> EntityFramework


2

ใช้CTP5แทนเป็นเวอร์ชั่นที่ใหม่กว่าซึ่งมีการเปลี่ยนแปลงบางอย่างใน API คุณต้องเพิ่มการอ้างอิงถึง EntityFramework.dll ซึ่งถูกติดตั้งในไดเรกทอรี CTP - ค่าเริ่มต้นคือ: c: \ Program คุณสมบัติของกรอบเอ็นติตี้ ADO.NET Files \ Microsoft ADO.NET 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 (ไม่ตรงตามตัวพิมพ์ใหญ่ - เล็ก)) จากนั้นติดตั้งอีกครั้ง (ติดตั้งแพคเกจ EntityFramework) ผ่านคอนโซล PM


1

ฉันมีปัญหานี้อ่านคำตอบข้างต้นและดาวน์โหลด entityframework.ddl แต่พบว่ามันถูกอ้างอิง alreadt ดังนั้นฉันจึงเพิ่มเนมสเปซและปัญหาได้รับการแก้ไข

ใช้ System.Data.Entity;

ฉันใช้ Visual Studio 2010, SP1 ติดตั้ง



1

ฉันมีข้อผิดพลาดเดียวกัน แต่ปัญหาเป็นเพียงปัญหาของโมเดลของฉันเท่านั้น

ฉันตั้งใจใส่ ...

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

... ด้านในของคลาสโมเดล


1
3 บรรทัดนั้นจริง ๆ ในชั้นเรียนหรือไม่
Nate-Wilkins

1

เป็นอีกทางเลือกหนึ่งที่คุณสามารถไปที่นี่ - คำแนะนำวิธีการติดตั้ง dll ที่ต้องการ

หรือคุณสามารถดาวน์โหลดNuGetและจัดการจาก VS


1

คลิกขวาที่การอ้างอิงของคุณและไปที่การจัดการแพ็คเกจ NuGet จากนั้นเลือกออนไลน์ทั้งหมดจากนั้นเลือกแพ็คเกจ NuGet ในกล่องข้อความค้นหาประเภท Entity Framework และติดตั้ง


1

1) ถอนการติดตั้ง Entity Framework จากโครงการทั้งหมด

2) เริ่ม Visual Studio ใหม่

3) การติดตั้งใหม่สำหรับโครงการที่จำเป็นทั้งหมด

และมันก็เริ่มทำงาน


1

อาจมีกรณีที่คุณอ้างอิงทุกสิ่งที่คุณต้องการและคุณสามารถไปที่ Definition โดยกด F12 ในคลาส DbContext ซึ่งจะพาคุณไปที่ System.Data.Entity namespace แต่คุณยังได้รับคำเตือนคอมไพเลอร์ที่น่ารังเกียจนี้ ตรวจสอบให้แน่ใจว่า Target Framework ของโครงการของคุณและ Entity Framework เวอร์ชันที่คุณใช้อยู่ตรงกัน ไปที่โครงการ -> คุณสมบัติ -> แท็บแอปพลิเคชัน เปลี่ยน Framework Framework (ไม่สามารถบอกได้ว่าข้อใดข้อหนึ่งการลองผิดลองถูกจะช่วยได้) แค่สองเซ็นต์ของฉัน


1

ฉันยังหงุดหงิดจากปัญหานี้หลายครั้งและในที่สุดก็หาทางออกไปที่ไฟล์ edmx-> อัปเดตโมเดลจากฐานข้อมูล -> รีเฟรช -> เสร็จสิ้น Clean Solution-> สร้างโซลูชันใหม่



0

เช่นเดียวกับคนอื่น ๆ ได้แนะนำ:

  1. เพิ่มการอ้างอิงและคำสั่งที่ถูกต้อง แต่มันก็ยังใช้งานไม่ได้? บางทีคุณอาจมีปัญหาแบบเดียวกันกับที่ฉันทำ:

ดูด้านล่างและดูว่าคุณสามารถบอกฉันว่ามีอะไรผิดปกติหรือไม่:

public class PanelLengthContext : DBContext { } ??!

ตรวจสอบให้แน่ใจว่าชื่อคลาสไม่ได้สะกดผิด - (ตัวพิมพ์เล็กและใหญ่)!

  • DbContext คือการสะกดที่ถูกต้อง
  • นี่คือลักษณะที่ควรจะเป็น:
  • ตรวจสอบการสะกดคำ อย่าเสียเวลา 20 นาทีในชีวิตของคุณเหมือนอย่างที่เคยทำpublic class PanelLengthContext : DbContext {}

HTH


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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.