O Entity Framework oferece suporte a tipos abstratos nos modelos EDM?

No Entity Framework, é sim possível declarar tipos abstrator no modelo EDM (arquivo .csdl) — ou seja, não podem ser criadas instâncias para estes tipos, mas outros tipos podem ser derivados destes tipos abstratos. Na verdade, estes tipos podem ser marcados como abstratos no modo designer. Em tempo de execução é permitido que tipos abstratos sejam o tipo base para vários conjuntos de entidades diferentes (imagine um cenário onde você quer um único tipo de base para todas as suas entidades mesmo que eles estejam em vários conjuntos). Para obter mais informações, consulte elemento EntityType (CSDL) [Em inglês].

 

O Entity Framework tem suporte para tipos complexos? Quais são os tipos complexos? O que eles possuem de diferente dos tipos de entidade no EDM?

Tipo complexo no Entity Framework é o nome das propriedades de valor que têm estrutura mais complexa do que as escalares. Um exemplo básico é o tipo endereço que contém várias partes (rua, cidade, estado, etc.). Tipos complexos são parecidos com entidades, exceto que eles não têm qualquer identidade própria (eles são tipos de valor como uma propriedade escalar). Isso significa que uma instância do tipo complexo é sempre uma parte de alguma outra entidade — ele não pode estar fora de alguma entidade, ele não tem relações, etc. O Entity Framework oferece suporte a tipos complexos, mas atualmente os cenários de mapeamento para tipos complexos são significativamente limitados: não há suporte para herança (herança é suportada nas entidades — mas não para tipos complexos), propriedades de tipo complexo não podem ser nulas e só pode existir em casos simples, não em coleções. Para obter mais informações, consulte tipo complexo (CSDL) [Em inglês] .

O Entity Framework oferece suporte a vários conjuntos de entidades por tipo? Por que o suporte à "múltiplo conjunto de entidades por tipo" é necessário?

No Entity Framework você pode definir um modelo que tenha mais de uma entidade definida com o mesmo tipo base. Isto é importante porque permite modelos que funcionam mais naturalmente com vários modelos de banco de dados. Se você tiver duas tabelas com o mesmo esquema (por exemplo, "contas" e "contas_expiradas"), você pode definir uma entidade para cada tabela que usa o mesmo tipo de entidade em vez de criar dois tipos de entidades diferentes que só para ter as mesmas propriedades. Para obter mais informações, consulte entidade conjuntos (CSDL) [Em inglês] .Com isto, a criação de vários conjuntos de entidades para o mesmo tipo pode adicionar complexidade significativa ao seu modelo e na prática raramente é usada. Como resultado, o designer e um número crescente de novos recursos em tempo de execução do Entity Framework, como o ObjectSet têm menos ou não há suporte para múltiplas entidades definidas para o mesmo tipo. Geralmente é recomendado para restringir-se a no máximo uma entidade definida para cada tipo.

Há suporte para associações entre subtipos?

O Entity Framework suporta associações entre subtipos. Isso significa que você pode definir relações entre todos os tipos na hierarquia do tipo mesmo se eles não são os tipos base. Assim, por exemplo, se você tiver uma hierarquia que tem cliente e BigAccountCustomer, em seguida, você poderia criar uma entidade DiscountPolicy e um relacionamento que se une com BigAccountCustomers DiscountPolicies, mas não dizem respeito aos clientes para DiscountPolicies.

Note-se, porém, que serviços de dados do WCF atualmente não oferece suporte a associações entre subtipos. Com os serviços de dados, todas as associações devem ser entre os tipos de raiz de conjuntos de entidades envolvidos.

O EDM oferece suporte GUIDs?

Sim. O EDM oferece suporte a GUID como um dos seus tipos primitivos. Você pode usar GUIDs como colunas normais ou como chaves primárias em seu modelo conceitual. Consulte trabalhar com chaves de entidade [Em inglês] para obter mais informações sobre como usar GUIDs na EntityKeys.

O EDM/EF suporta enums?

Ainda não. Há planos para adicionar suporte em versões futuras. Você pode experimentar com o novo suporte ao enum no Entity Framework de junho de 2011 CTP [Em inglês] .

Aqui está uma possível solução alternativa proposta por Alex James: dica 23 - o falso Enums no EF 4 [Em inglês] 

Como excluir um objeto e todas as suas entidades relacionadas? É recomendado especificar a exclusão em cascata [Cascade Delete] no modelo e não no banco de dados (ou o inverso)?

Para excluir um objeto e todas as suas entidades relacionadas, especifique a exclusão em cascata no modelo e no banco de dados. Para evitar resultados inesperados é altamente recomendável que você especifique regras de exclusão em cascata no modelo e no banco de dados.

As seguintes considerações se aplicam ao adicionar regras de exclusão em cascata:

  • Se você atualizar o banco de dados com uma regra de exclusão em cascata e, em seguida, atualizar o modelo do banco de dados, o designer do Entity Framework não irá adicionar uma regra de exclusão em cascata no modelo conceitual. Você terá que adicioná-la manualmente.
  • Se você adicionar a regra de exclusão em cascata para um modelo, o Entity Framework não irá substituí-lo, se você atualizar o modelo do banco de dados.
  • Se você cria seu modelo primeiro e gera seu banco de dados a partir de um modelo que tem regras de exclusão em cascatas especificadas, as regras serão propagadas para o banco de dados.

O blog abaixo explica por que você deve ter regras de exclusão em cascata especificadas no modelo e no banco de dados: http://blogs.msdn.com/b/alexj/archive/2009/08/19/tip-33-how-cascade-delete-really-works-in-ef.aspx. [Em inglês]

Consulte também as regras de Exclusão em Cascata na seção de relações de Criando, adicionando, modificando e excluindo objetos [Em inglês] .

O Entity Framework permite a incorporação de arquivos de metadados como recursos no assembly?

Sim. O Entity Framework permite armazenar arquivos de metadados como recursos no assembly; na string de conexão você pode dizer ao Entity Framework para encontrá-los lá. A maneira de fazer isso é adicionar os arquivos CSDL MSL e SSDL ao seu projeto e definir a propriedade "Build Action" em cada um deles como "Embedded Resource". Em seguida, quando você especificar a string de conexão, em vez de explicitamente listar os arquivos de metadados, você só precisa adicionar "metadados = res: //*/;" que informa ao EF para procurar recursos apropriados em seu aplicativo que estão vinculados de forma estática em assemblies. Para obter mais informações, consulte string de conexão (Entity Framework) [Em inglês]A única coisa a ter cuidado é que o assembly que tem os recursos deverão ser carregados no mesmo domínio de aplicativo que tem a conexão de entidade.

Quando é usado o arquivo EDMX? Qual é a diferença entre o arquivo EDMX e os arquivos de três esquemas (CSDL MSL e SSDL)?

O designer do EDM usa um arquivo chamado EDMX para armazenar todos os metadados sobre um modelo Entity Framework. Este arquivo inclui os arquivos CSDL MSL e SSDL em seções separadas dentro dela. Em tempo de execução, o sistema requer três arquivos separados, e o designer os cria automaticamente no projeto em tempo de compilação no diretório do aplicativo ou como recursos em um assembly.

Como é o suporte a "using" em arquivos de metadados ?

O suporte a <Using> em arquivos de metadados: modelos podem ser construídos a partir de múltiplos arquivos CSDL separados — um pouco como uma diretiva "using" em um arquivo c#, que traz um espaço para  o nome do arquivo, ou como uma instrução #include em um programa C/C++, exceto com validação maior do que você ter um arquivo de texto de pré-processamento de #include. Para obter mais informações, consulte [usando o elemento (CSDL) [Em inglês] Dito isso, esse recurso só permite a composição de arquivos CSDL, não há suporte para MSL ou SSDL e não há suporte no designer. Este é um recurso muito limitado que a maioria dos programadores não vão achar útil na prática, portanto, ele deve ser ignorado.

É possível criar consultas que se estendem por vários contextos de objeto (o espaço) e/ou entidade conexões (c-espaço)?

O EF não oferece suporte a consultas em contextos de objeto (o espaço) ou conexões de entidade (c-espaço). Ele também não oferece suporte a modelos mapeados para mais de um banco de dados (se pudesse, seria possível criar um contexto de objeto em tabelas de vários bancos de dados).

Existem duas soluções:

  • Abra vários contextos, faça consultas para trazer objetos para o cliente e, em seguida, juntar as coleções usando LINQ to Objects.
  • Use o recurso de servidores vinculados do SQL Server para ocultar o fato de que há mais de um banco de dados. Fazer parecer para o modelo que é um banco de dados.

Anotações personalizadas podem ser adicionadas no arquivo CSDL?

Não há suporte no arquivo CSDL para incluir anotações personalizadas, mas pode ser útil para ferramentas ou outros sistemas construídos em torno do EDM. Estas anotações são oferecidas pelas APIs de metadados mas não são usadas pelo EF.