Tür veya ad alanı adı 'Nesneler' ad alanında 'System.Data' mevcut değil


102

Bir n katmanlı uygulama oluşturmak için varlıklar, C # ve SQL Server kullanıyorum. Tüm DAL bileşenlerim için ortak bazı temel sınıflar oluşturuyorum. Bu temel sınıfta, varlıklar nesnesi tarafından miras alınan ObjectContext temel sınıfının bağlantı durumunu işlemek istiyorum.

Derleme aşağıdaki hatayı verir:

'Nesneler' tür veya ad alanı adı 'System.Data' ad alanında mevcut değil (bir derleme başvurusu eksik mi?)

Ayrıca, using deyimi System.Data.Objects aynı nedenle çözülmez.

Derlemeyi referans olarak eklemeyi denedim, ancak derleme referanslarının .NET sekmesinde bulamadım.

Düşüncesi olan var mı? Teşekkürler!

Yanıtlar:


208

.NET derlemesine System.Data.Entity.dll için bir başvuru eklemeniz gerekir.


1
İşe yaradı! Meraklı, System.Data.objects ad alanı gerçekten System.Data.Entity içinde mevcutsa?
pencilslate

52

Entity Framework 6 kullanıyorsanız, ad alanı değişmiştir. Kullanmak istiyorsun

System.Data.Entity.Core.Objects.ObjectQuery

NuGet paket yöneticisi aracılığıyla Entity Framework 6.1.3 yükledim. HENÜZ Microsoft'un derleme System.Data.Entity başvurusuna sahip değilim. Bana hatalar veriyor. Öyleyse sorum şu, using ifadesini eklemeden önce System.Data.Entity FIRST'a başvurmam gerekir mi?
vibs2006

31

Bir süre önce EF5'ten EF6 nuget'e yükseltildi ve bu sorunla karşılaşmaya devam etti. Üretilen kodu referans olarak güncelleyerek geçici olarak düzeltebilirimSystem.Data.Entity.Core.Objects , ancak oluşturulduktan sonra tekrar değiştirilir (oluşturulduğundan beri beklendiği gibi).

Bu sorunu tamamen çözdü:

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

EF Designer ile oluşturulmuş herhangi bir modeliniz varsa, EF6 uyumlu kod oluşturmak için kod oluşturma şablonlarını güncellemeniz gerekir. Not: Şu anda Visual Studio 2012 ve 2013 için kullanılabilen yalnızca EF 6.x DbContext Generator şablonları vardır.

  1. Mevcut kod oluşturma şablonlarını silin. Bu dosyalar genellikle <edmx_file_name> .tt ve <edmx_file_name> .Context.tt olarak adlandırılır ve Çözüm Gezgini'nde edmx dosyanızın altına yerleştirilir. Şablonları Çözüm Gezgini'nde seçebilir ve Delsilmek için tuşuna basabilirsiniz .
    Not: Web Sitesi projelerinde, şablonlar edmx dosyanızın altına yerleştirilmez, bunun yanında Solution Explorer'da listelenir.
    Not: VB.NET projelerinde, yuvalanmış şablon dosyalarını görebilmek için "Tüm Dosyaları Göster" i etkinleştirmeniz gerekecektir.
  2. Uygun EF 6.x kod oluşturma şablonunu ekleyin. Modelinizi EF Designer'da açın, tasarım yüzeyine sağ tıklayın ve Add Code Generation Item ... öğesini seçin .
    • DbContext API (önerilen) kullanıyorsanız, EF 6.x DbContext Üreticisi Veri sekmesi altında bulunacaktır .
      Not: Visual Studio 2012 kullanıyorsanız, bu şablona sahip olmak için EF 6 Araçlarını yüklemeniz gerekir. Bkz. Entity Framework Edinme için .
    • ObjectContext API kullanıyorsanız, Online sekmesini seçmeniz ve EF 6.x EntityObject Generator öğesini aramanız gerekir .
  3. Kod oluşturma şablonlarına herhangi bir özelleştirme uyguladıysanız, bunları güncellenmiş şablonlara yeniden uygulamanız gerekecektir.


3

"System.Data.Objects.EntityFunctions" ı kullanmak istiyorsanız

EF 6.1+ sürümünde "System.Data.Entity.DbFunctions" kullanın


3

EF 6+ için benim durumumda, bunu kullanırken:

System.Data.Entity.Core.Objects.ObjectQuery

Bu komutun bir parçası olarak:

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

Bu hatayı aldım:

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'

Ben de bunu kullanmak zorunda kaldım:

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

Elbette anonim tip imzanız farklı olabilir.

HTH.


0

System.Data.Linq için .dll dosyasına bir başvuru ekledim, yukarıdakiler yeterli değildi. Aşağıdaki sürümler için çeşitli dizinlerde .dll'yi bulabilirsiniz.

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
Düzeltme burada bir soruyu yanıtlar: 'Linq' tür veya ad alanı adı 'System.Data' ad alanında yoktur
Tom Cubbins

0

.NET derleme System.Data.Linq için bir başvuru eklemeniz gerekir


Merhaba Null29, cevabınızın daha önce verilenlerden nasıl daha iyi olduğunu açıklayabilir misiniz?
Noel Widmer
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.