Jenis atau nama ruang nama 'Objek' tidak ada di ruang nama 'System.Data'

101

Saya menggunakan entitas, C # dan SQL Server untuk membuat aplikasi n-tier. Saya membuat beberapa kelas dasar yang umum untuk semua komponen DAL saya. Di kelas dasar ini, saya ingin menangani status koneksi kelas dasar ObjectContext yang diwarisi oleh objek entitas.

Mengompilasi menghasilkan kesalahan berikut:

Jenis atau nama ruang nama 'Objek' tidak ada di ruang nama 'System.Data' (apakah Anda kehilangan referensi perakitan?)

Juga, pernyataan menggunakan System.Data.Objects tidak menyelesaikan karena alasan yang sama.

Saya mencoba menambahkan assembly sebagai referensi, tetapi tidak dapat menemukannya di tab .NET pada referensi assembly.

Ada pemikiran? Terima kasih!

pensil
sumber

Jawaban:

207

Anda perlu menambahkan referensi ke rakitan .NET System.Data.Entity.dll.

Joshua Belden
sumber
1
Berhasil! Penasaran, apakah namespace System.Data.objects memang ada di dalam System.Data.Entity?
pelat pensil
52

Jika Anda menggunakan Entity Framework 6, ruang nama telah berubah. Anda ingin menggunakan

System.Data.Entity.Core.Objects.ObjectQuery
James
sumber
Saya memiliki Entity Framework 6.1.3 yang diinstal melalui manajer paket nuget. Saya belum memiliki referensi Microsoft's assembly System.Data.Entity. Ini memberi saya kesalahan. Jadi pertanyaan saya adalah apakah saya perlu mereferensikan System.Data.Entity PERTAMA sebelum menambahkan pernyataan itu menggunakan?
vibs2006
31

Telah ditingkatkan dari EF5 ke EF6 nuget beberapa waktu yang lalu dan terus mengalami masalah ini. Saya akan sementara memperbaikinya dengan memperbarui kode yang dihasilkan menjadi referensi System.Data.Entity.Core.Objects, tetapi setelah generasi itu akan diubah kembali (seperti yang diharapkan sejak dibuat).

Ini memecahkan masalah untuk selamanya:

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

Jika Anda memiliki model yang dibuat dengan EF Designer, Anda perlu memperbarui templat pembuatan kode untuk menghasilkan kode yang kompatibel dengan EF6. Catatan: Saat ini hanya ada templat Generator EF 6.x DbContext yang tersedia untuk Visual Studio 2012 dan 2013.

  1. Hapus template pembuatan kode yang ada. File-file ini biasanya akan diberi nama <edmx_file_name> .tt dan <edmx_file_name> .Context.tt dan ditempatkan di bawah file edmx Anda di Solution Explorer. Anda dapat memilih template di Solution Explorer dan tekan Deltombol untuk menghapusnya.
    Catatan: Dalam proyek Situs Web, templat tidak akan ditempatkan di bawah file edmx Anda, tetapi terdaftar di sampingnya di Solution Explorer.
    Catatan: Dalam proyek VB.NET Anda harus mengaktifkan 'Show All Files' agar dapat melihat file template bersarang.
  2. Tambahkan templat pembuatan kode EF 6.x yang sesuai. Buka model Anda di EF Designer, klik kanan pada permukaan desain dan pilih Add Code Generation Item ...
    • Jika Anda menggunakan DbContext API (disarankan) maka EF 6.x DbContext Generator akan tersedia di bawah tab Data .
      Catatan: Jika Anda menggunakan Visual Studio 2012, Anda perlu menginstal EF 6 Tools untuk memiliki template ini. Lihat Get Entity Framework untuk detailnya.
    • Jika Anda menggunakan API ObjectContext maka Anda perlu memilih tab Online dan mencari EF 6.x EntityObject Generator .
  3. Jika Anda menerapkan penyesuaian apa pun ke templat pembuatan kode, Anda perlu menerapkannya kembali ke templat yang diperbarui.
Tim Valentine
sumber
3

jika Anda ingin menggunakan "System.Data.Objects.EntityFunctions"

gunakan "System.Data.Entity.DbFunctions" di EF 6.1+

sumanth
sumber
3

Dalam kasus saya untuk EF 6+, saat menggunakan ini:

System.Data.Entity.Core.Objects.ObjectQuery

Sebagai bagian dari perintah ini:

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

Saya mendapat kesalahan ini:

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'

Jadi saya akhirnya harus menggunakan ini:

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

Tentu saja tanda tangan tipe anonim Anda mungkin berbeda.

HTH.

pengguna8128167
sumber
0

Saya menambahkan referensi ke file .dll, untuk System.Data.Linq, hal di atas tidak cukup. Anda dapat menemukan .dll di berbagai direktori untuk versi berikut.

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

Tom Cubbins
sumber
2
Koreksi ini menjawab pertanyaan di mana: Jenis atau nama namespace 'Linq' tidak ada dalam namespace 'System.Data'
Tom Cubbins
0

Anda perlu menambahkan referensi ke rakitan .NET System.Data.Linq

Null29
sumber
Hai Null29, dapatkah Anda menjelaskan bagaimana jawaban Anda lebih baik daripada yang sudah disediakan?
Noel Widmer