[c#] 형식 또는 네임 스페이스 이름 ‘Objects’가 네임 스페이스 ‘System.Data’에 없습니다.

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

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

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

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

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

이견있는 사람? 감사!



답변

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


답변

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

System.Data.Entity.Core.Objects.ObjectQuery


답변

잠시 전에 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. 코드 생성 템플릿에 사용자 지정을 적용한 경우 업데이트 된 템플릿에 다시 적용해야합니다.

답변

VS 2013에서 동일한 문제

Web.config에 추가했습니다.

<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />

그것은 매력처럼 작동했습니다.

다음 페이지에서 찾았습니다.
http://www.programmer.bz/Home/tabid/115/asp_net_sql/281/The-type-or-namespace-name-Objects-does-not-exist-in-the-namespace- SystemData.aspx


답변

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

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


답변

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.


답변

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