Loại hoặc tên không gian tên 'Đối tượng' không tồn tại trong không gian tên 'System.Data'


101

Tôi đang sử dụng các thực thể, C # và SQL Server để tạo một ứng dụng n-tier. Tôi đang tạo một số lớp cơ sở chung cho tất cả các thành phần DAL của mình. Trong lớp cơ sở này, tôi muốn xử lý trạng thái kết nối của lớp cơ sở ObjectContext được kế thừa bởi đối tượng thực thể.

Biên dịch sẽ xảy ra lỗi sau:

Loại hoặc tên vùng tên 'Đối tượng' không tồn tại trong vùng tên 'System.Data' (bạn có thiếu tham chiếu hợp ngữ không?)

Ngoài ra, câu lệnh sử dụng System.Data.Objects không giải quyết được vì lý do tương tự.

Tôi đã thử thêm hội đồng làm tham chiếu, nhưng không thể tìm thấy nó trong tab .NET của tham chiếu hợp ngữ.

Có suy nghĩ gì không? Cảm ơn!

Câu trả lời:


207

Bạn cần thêm tham chiếu đến .NET assembly System.Data.Entity.dll.


1
Nó đã làm việc! Tò mò, nếu không gian tên System.Data.objects thực sự có trong System.Data.Entity?
pencilslate

52

Nếu bạn đang sử dụng Entity Framework 6, không gian tên đã thay đổi. Bạn muốn sử dụng

System.Data.Entity.Core.Objects.ObjectQuery

Tôi đã cài đặt Entity Framework 6.1.3 thông qua trình quản lý gói nuget. Tôi không tham chiếu YET lắp ráp System.Data.Entity của Microsoft. Nó cho tôi lỗi. Vì vậy, câu hỏi của tôi là tôi có cần tham chiếu System.Data.Entity FIRST trước khi thêm câu lệnh using đó không?
vibs2006

31

Đã nâng cấp từ EF5 lên EF6 nuget một thời gian trước và vẫn gặp sự cố này. Tôi muốn khắc phục tạm thời bằng cách cập nhật mã đã tạo thành tham chiếu System.Data.Entity.Core.Objects, nhưng sau khi tạo, nó sẽ được thay đổi lại một lần nữa (như mong đợi kể từ khi được tạo).

Điều này đã giải quyết tốt vấn đề:

http://msdn.microsoft.com/en-us/data/upgradeef6

Nếu bạn có bất kỳ mô hình nào được tạo bằng EF Designer, bạn sẽ cần cập nhật các mẫu tạo mã để tạo mã tương thích EF6. Lưu ý: Hiện chỉ có các mẫu EF 6.x DbContext Generator có sẵn cho Visual Studio 2012 và 2013.

  1. Xóa các mẫu tạo mã hiện có. Các tệp này thường sẽ được đặt tên là <edmx_file_name> .tt<edmx_file_name> .Context.tt và được lồng trong tệp edmx của bạn trong Solution Explorer. Bạn có thể chọn các mẫu trong Giải pháp Explorer và nhấn Delphím để xóa chúng.
    Lưu ý: Trong các dự án Trang Web, các mẫu sẽ không được lồng trong tệp edmx của bạn, nhưng được liệt kê cùng với nó trong Giải pháp Explorer.
    Lưu ý: Trong các dự án VB.NET, bạn sẽ cần bật 'Hiển thị Tất cả Tệp' để có thể xem các tệp mẫu lồng nhau.
  2. Thêm mẫu tạo mã EF 6.x thích hợp. Mở mô hình của bạn trong EF Designer, nhấp chuột phải vào bề mặt thiết kế và chọn Thêm mục tạo mã ...
    • Nếu bạn đang sử dụng API DbContext (được khuyến nghị) thì EF 6.x DbContext Generator sẽ có sẵn trong tab Dữ liệu .
      Lưu ý: Nếu bạn đang sử dụng Visual Studio 2012, bạn sẽ cần cài đặt Công cụ EF 6 để có mẫu này. Xem Get Entity Framework để biết thêm chi tiết.
    • Nếu bạn đang sử dụng API ObjectContext thì bạn sẽ cần chọn tab Trực tuyến và tìm kiếm Bộ tạo EF 6.x EntityObject .
  3. Nếu bạn đã áp dụng bất kỳ tùy chỉnh nào cho các mẫu tạo mã, bạn sẽ cần áp dụng lại chúng cho các mẫu đã cập nhật.


3

nếu bạn muốn sử dụng "System.Data.Objects.EntityFunctions"

sử dụng "System.Data.Entity.DbFunctions" trong EF 6.1+


3

Trong trường hợp của tôi cho EF 6+, khi sử dụng cái này:

System.Data.Entity.Core.Objects.ObjectQuery

Là một phần của lệnh này:

var sql = ((System.Data.Entity.Core.Objects.ObjectQuery)query).ToTraceString();

Tôi gặp lỗi này:

Cannot cast 'query' (which has an actual type of 'System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>') to 'System.Data.Entity.Core.Objects.ObjectQuery'

Vì vậy, tôi đã phải sử dụng cái này:

var sql = ((System.Data.Entity.Infrastructure.DbQuery<<>f__AnonymousType3<string,string,string,short,string>>)query).ToString();    

Tất nhiên chữ ký kiểu ẩn danh của bạn có thể khác.

HTH.


0

Tôi đã thêm một tham chiếu đến tệp .dll, cho System.Data.Linq, ở trên là không đủ. Bạn có thể tìm thấy .dll trong các thư mục khác nhau cho các phiên bản sau.

System.Data.Linq C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0

System.Data.Linq C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ Profile \ Client \ System.Data.Linq.dll 4.0.0.0


2
Correction này trả lời một câu hỏi đó: Loại hoặc namespace tên 'LINQ' không tồn tại trong không gian tên 'System.Data'
Tom Cubbins

0

Bạn cần thêm một tham chiếu đến .NET assembly System.Data.Linq


Xin chào Null29, bạn có thể giải thích làm thế nào câu trả lời của bạn tốt hơn những câu đã được cung cấp?
Noel Widmer
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.