형식 또는 네임 스페이스 이름 'Objects'가 네임 스페이스 'System.Data'에 없습니다.


101

엔티티, C # 및 SQL Server를 사용하여 n 계층 앱을 만들고 있습니다. 모든 DAL 구성 요소에 공통적 인 몇 가지 기본 클래스를 만들고 있습니다. 이 기본 클래스에서 엔티티 개체에 상속 된 ObjectContext 기본 클래스의 연결 상태를 처리하고 싶습니다.

컴파일하면 다음 오류가 발생합니다.

형식 또는 네임 스페이스 이름 'Objects'가 네임 스페이스 'System.Data'에 없습니다 (어셈블리 참조가 누락 되었습니까?).

또한 using 문 System.Data.Objects도 같은 이유로 확인되지 않습니다.

어셈블리를 참조로 추가하려고했지만 어셈블리 참조의 .NET 탭에서 찾을 수 없습니다.

이견있는 사람? 감사!

답변:


207

.NET 어셈블리 System.Data.Entity.dll에 대한 참조를 추가해야합니다.


1
작동했습니다! System.Data.objects 네임 스페이스가 실제로 System.Data.Entity 내에 있는지 궁금하십니까?
pencilslate 2009-08-13

52

Entity Framework 6을 사용하는 경우 네임 스페이스가 변경되었습니다. 사용하고 싶은

System.Data.Entity.Core.Objects.ObjectQuery

Nuget 패키지 관리자를 통해 Entity Framework 6.1.3을 설치했습니다. 아직 Microsoft의 어셈블리 System.Data.Entity를 참조하지 않았습니다. 나에게 오류를 준다. 그래서 내 질문은 using 문을 추가하기 전에 System.Data.Entity를 먼저 참조해야한다는 것입니다.
vibs2006

31

잠시 전에 EF5에서 EF6로 업그레이드하고이 문제가 계속 발생했습니다. 생성 된 코드를 참조로 업데이트하여 임시 수정합니다.System.Data.Entity.Core.Objects 했지만 생성 후에는 다시 변경됩니다 (생성 된 이후 예상대로).

이것은 문제를 잘 해결했습니다.

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

EF Designer로 만든 모델이있는 경우 EF6 호환 코드를 생성하도록 코드 생성 템플릿을 업데이트해야합니다. 참고 : 현재 Visual Studio 2012 및 2013에 사용할 수있는 EF 6.x DbContext Generator 템플릿 만 있습니다.

  1. 기존 코드 생성 템플릿을 삭제합니다. 이러한 파일의 이름은 일반적으로 <edmx_file_name> .tt<edmx_file_name> .Context.tt 이며 솔루션 탐색기에서 edmx 파일 아래에 중첩됩니다. 솔루션 탐색기에서 템플릿을 선택하고 Del키를 눌러 삭제할 수 있습니다.
    참고 : 웹 사이트 프로젝트에서 템플릿은 edmx 파일 아래에 중첩되지 않고 솔루션 탐색기에 나열됩니다.
    참고 : VB.NET 프로젝트에서 중첩 된 템플릿 파일을 보려면 '모든 파일 표시'를 활성화해야합니다.
  2. 적절한 EF 6.x 코드 생성 템플릿을 추가합니다. EF 디자이너에서 모델을 열고 디자인 화면을 마우스 오른쪽 단추로 클릭 한 다음 코드 생성 항목 추가 ...를 선택합니다 .
    • DbContext API (권장)를 사용하는 경우 EF 6.x DbContext Generator데이터 탭에서 사용할 수 있습니다 .
      참고 : Visual Studio 2012를 사용하는 경우이 템플릿을 사용하려면 EF 6 도구를 설치해야합니다. Entity Framework 가져 오기를 참조 하십시오. 를 참조하십시오.
    • ObjectContext API를 사용하는 경우 온라인 탭 을 선택하고 EF 6.x EntityObject Generator를 검색 해야합니다 .
  3. 코드 생성 템플릿에 사용자 지정을 적용한 경우 업데이트 된 템플릿에 다시 적용해야합니다.


3

"System.Data.Objects.EntityFunctions"를 사용하려는 경우

EF 6.1 이상에서 "System.Data.Entity.DbFunctions"사용


3

EF 6+의 경우 이것을 사용할 때 :

System.Data.Entity.Core.Objects.ObjectQuery

이 명령의 일부로 :

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

이 오류가 발생했습니다.

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'

그래서 나는 이것을 사용해야했습니다.

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

물론 익명 형식 서명은 다를 수 있습니다.

HTH.


0

System.Data.Linq에 대한 .dll 파일에 대한 참조를 추가했지만 위의 내용은 충분하지 않았습니다. 다음 버전의 다양한 디렉토리에서 .dll을 찾을 수 있습니다.

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
형식 또는 네임 스페이스 이름 'Linq는이'네임 스페이스 'System.Data'에 존재하지 않습니다 : 수정이 질문에 대답
톰 Cubbins

0

.NET 어셈블리 System.Data.Linq에 대한 참조를 추가해야합니다.


안녕하세요 Null29, 귀하의 답변이 이미 제공된 답변보다 더 나은 방법을 설명해 주시겠습니까?
Noel Widmer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.