Skip Navigation Links
Novas Tecnologias
Ferramentas Adicionais
Ferramentas Adicionais


Dica No :
1122
Assunto : ADO.NET
Titulo: Utilizando GUID como chave no Entity Framework

Gostou do texto ? Vote e dê sua opinião! Pontuação atual :

Translate this page now :






Adicione aos Favoritos!
BlogBlogs Rec6 Linkk Ueba Technorati Delicious DiggIt! StumbleUpon



Alguns administradores de dados tem como prática o uso campos GUID como chave primária, ao invés dos típicos identity. Existem pontos positivos e negativos em relação ao uso dos campos GUID, essa não é a questão.

O problema é como o entity framework trabalha - ou deixa de trabalhar - com campos GUID definidos como chave primária.

O SQL Server permite configurarmos um valor default para o campo utilizando a função newid(), desta forma o campo GUID ganha um novo valor a cada novo registro inserido.

O entity framework, porém, tem dificuldade de compreender a configuração desse campo.

O primeiro passo para fazer com que o campo GUID possa funcionar como chave primária é configurar a propriedade StoreGeneratedPattern como Identity. Isso faz (ou deveria fazer) com que o entity framework não preencha o valor desse campo.

Porém, infelizmente, existe um bug no VS 2010 que faz com que essa configuração não seja compreendida por completo. O efeito é que, na inserção de novos registros, o campo GUID é preenchido com um GUID nulo.

Para entendermos porque isso ocorre - e resolver - precisamos entender um pouco mais a estrutura do Entity Framework. O EDMX é dividido em 3 partes : CSDL (modelo lógico), SSDL (modelo físico) e MSL (mapeamento do lógico para o físico).

Ocorre que quando configuramos a propriedade StoreGeneratedPattern a configuração é feita apenas no CSDL e não no SSDL. Com isso a gravação de dados no banco ocorre de forma errada.

Para solucionar isso, precisamos fazer uma correção manualmente no arquivo EDMX. Deve-se seguir os seguintes passos :

1) Clique com o botão direito no arquivo .edmx
2) Selecione a opção para abri-lo em um editor XML
3) Localize o trecho referente ao modelo físico, SSDL
4) Localize a tag <Property> referente ao campo GUID
5) Adicione na tag Property o atributo StoreGeneratedPattern="Identity"

A tag property ficará semelhante a esta :

<Property Name="ID" Type="uniqueidentifier" Nullable="false" StoreGeneratedPattern="Identity" />

Isso resolverá o problema do funcionamento do modelo, a gravação funcionará corretamente, porém dificultará o desenvolvimento. Sempre que for realizado um "Update Model from database" essa configuração do EDMX será perdida, exigindo que o EDMX seja novamente configurado manualmente.

Esse problema foi reconhecido como um bug na interface do entity framework no VS 2010 e foi criado um hotfix para corrigi-lo. Você pode baixar e instalar o hotfix nesse link : http://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=37957


Nome :
E-mail:
Comentarios :
 
 
Os Últimos Comentários
Nenhum comentário foi realizado ainda. Seja o primeiro !
Dicas
Dica do Dia
Receba Dicas Por Email
E-mail :  
 


 (help)
Aceito receber informativos do devASPNet, informações de eventos e treinamentos

Veja Quais Informativos Você Receberá

Pesquisar Dicas
Pesquisar Artigos, Dicas e Noticias

Banco de Dados
Algumas Entrevistas
Links Importantes

Búfalo Informática, Treinamento e Consultoria
R. Alvaro Alvim, 37/920 Centro - Cinelândia - Rio de Janeiro Cep: 20031-010
Tel : (21) 2262-1368 (21) 9240-5134 E-mail : Contato@bufaloinfo.com.br