O tipo ou nome do namespace 'Objetos' não existe no namespace 'System.Data'

101

Estou usando entidades, C # e SQL Server para criar um aplicativo de n camadas. Estou criando algumas classes básicas comuns a todos os meus componentes DAL. Nesta classe base, eu quero lidar com o estado de conexão da classe base ObjectContext herdada pelo objeto de entidades.

Compilar gera o seguinte erro:

O tipo ou nome do namespace 'Objects' não existe no namespace 'System.Data' (está faltando uma referência de assembly?)

Além disso, a instrução using System.Data.Objects não resolve pelo mesmo motivo.

Tentei adicionar o assembly como referência, mas não consegui encontrar na guia .NET de referências de assembly.

Alguma ideia? Obrigado!

lâmina de lápis
fonte

Respostas:

207

Você precisa adicionar uma referência ao assembly .NET System.Data.Entity.dll.

Joshua Belden
fonte
1
Funcionou! Curioso, se o namespace System.Data.objects está realmente presente no System.Data.Entity?
pencilslate
52

Se você estiver usando o Entity Framework 6, o namespace foi alterado. Você quer usar

System.Data.Entity.Core.Objects.ObjectQuery
James
fonte
Eu tenho o Entity Framework 6.1.3 instalado por meio do gerenciador de pacotes nuget. AINDA não fiz referência ao assembly System.Data.Entity da Microsoft. Está me dando erros. Portanto, minha pergunta é se preciso fazer referência a System.Data.Entity PRIMEIRO antes de adicionar essa instrução using?
vibs2006
31

Atualizado de EF5 para EF6 nuget um tempo atrás e continuei encontrando esse problema. Eu poderia corrigi-lo temporariamente, atualizando o código gerado para referência System.Data.Entity.Core.Objects, mas após a geração ele seria alterado novamente (como esperado, desde que foi gerado).

Isso resolveu o problema para sempre:

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

Se você tiver algum modelo criado com o EF Designer, precisará atualizar os modelos de geração de código para gerar o código compatível com o EF6. Nota: Atualmente, existem apenas modelos EF 6.x DbContext Generator disponíveis para Visual Studio 2012 e 2013.

  1. Exclua os modelos de geração de código existentes. Esses arquivos normalmente serão nomeados <edmx_file_name> .tt e <edmx_file_name> .Context.tt e serão aninhados em seu arquivo edmx no Solution Explorer. Você pode selecionar os modelos no Solution Explorer e pressionar a Deltecla para excluí-los.
    Nota: Em projetos de Web Site, os modelos não serão aninhados em seu arquivo edmx, mas listados ao lado dele no Solution Explorer.
    Nota: Em projetos VB.NET, você precisará habilitar 'Mostrar todos os arquivos' para poder ver os arquivos de modelo aninhados.
  2. Adicione o modelo de geração de código EF 6.x apropriado. Abra o seu modelo no EF Designer, clique com o botão direito na superfície de design e selecione Adicionar Item de Geração de Código ...
    • Se você estiver usando a API DbContext (recomendado), o EF 6.x DbContext Generator estará disponível na guia Dados .
      Nota: Se você estiver usando o Visual Studio 2012, você precisará instalar o EF 6 Tools para ter este modelo. Consulte Get Entity Framework para obter detalhes.
    • Se você estiver usando a API ObjectContext, será necessário selecionar a guia Online e pesquisar EF 6.x EntityObject Generator .
  3. Se você aplicou alguma personalização aos modelos de geração de código, precisará reaplicá-la aos modelos atualizados.
Tim Valentine
fonte
3

se você deseja usar "System.Data.Objects.EntityFunctions"

use "System.Data.Entity.DbFunctions" no EF 6.1+

Sumanth
fonte
3

No meu caso para EF 6+, ao usar este:

System.Data.Entity.Core.Objects.ObjectQuery

Como parte deste comando:

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

Eu tenho este erro:

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'

Então, acabei tendo que usar isso:

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

Claro que sua assinatura de tipo anônimo pode ser diferente.

HTH.

user8128167
fonte
0

Eu adicionei uma referência ao arquivo .dll, para System.Data.Linq, o acima não foi suficiente. Você pode encontrar .dll nos vários diretórios das seguintes versões.

System.Data.Linq C: \ Arquivos de programas (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.5 \ System.Data.Linq.dll 3.5.0.0

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

Tom Cubbins
fonte
2
A correção responde a uma pergunta em que: O tipo ou nome de namespace 'Linq' não existe no namespace 'System.Data'
Tom Cubbins
0

Você precisa adicionar uma referência ao assembly .NET System.Data.Linq

Null29
fonte
Olá Null29, você pode explicar como sua resposta é melhor do que as já fornecidas?
Noel Widmer