TechNet
Products
IT Resources
Downloads
Training
Support
Products
Windows
Windows Server
System Center
Microsoft Edge
Office
Office 365
Exchange Server
SQL Server
SharePoint Products
Skype for Business
See all products »
Resources
Channel 9 Video
Evaluation Center
Learning Resources
Microsoft Tech Companion App
Microsoft Technical Communities
Microsoft Virtual Academy
Script Center
Server and Tools Blogs
TechNet Blogs
TechNet Flash Newsletter
TechNet Gallery
TechNet Library
TechNet Magazine
TechNet Wiki
Windows Sysinternals
Virtual Labs
Solutions
Networking
Cloud and Datacenter
Security
Virtualization
Updates
Service Packs
Security Bulletins
Windows Update
Trials
Windows Server 2016
System Center 2016
Windows 10 Enterprise
SQL Server 2016
See all trials »
Related Sites
Microsoft Download Center
Microsoft Evaluation Center
Drivers
Windows Sysinternals
TechNet Gallery
Training
Expert-led, virtual classes
Training Catalog
Class Locator
Microsoft Virtual Academy
Free Windows Server 2012 courses
Free Windows 8 courses
SQL Server training
Microsoft Official Courses On-Demand
Certifications
Certification overview
Special offers
MCSE Cloud Platform and Infrastructure
MCSE: Mobility
MCSE: Data Management and Analytics
MCSE Productivity
Other resources
Microsoft Events
Exam Replay
Born To Learn blog
Find technical communities in your area
Azure training
Official Practice Tests
Support options
For business
For developers
For IT professionals
For technical support
Support offerings
More support
Microsoft Premier Online
TechNet Forums
MSDN Forums
Security Bulletins & Advisories
Not an IT pro?
Microsoft Customer Support
Microsoft Community Forums
Sign in
Home
Library
Wiki
Learn
Gallery
Downloads
Support
Forums
Blogs
Resources For IT Professionals
United States (English)
Россия (Pусский)
中国(简体中文)
Brasil (Português)
Skip to locale bar
Post an article
Translate this page
Powered by
Microsoft® Translator
Wikis - Page Details
First published by
Rick Saling - MSFT
(7Microsof)
When:
29 Dec 2011 1:02 PM
Last revision by
Rick Saling - MSFT
(7Microsof)
When:
5 Jan 2012 3:11 PM
Revisions:
2
Comments:
0
Options
Subscribe to Article (RSS)
Share this
Can You Improve This Article?
Positively!
Click Sign In to add the tip, solution, correction or comment that will help other users.
Report inappropriate content using
these instructions
.
Wiki
>
TechNet Articles
>
Entity Framework FAQ: Claves de Entidades (es-ES)
Entity Framework FAQ: Claves de Entidades (es-ES)
Article
History
Entity Framework FAQ: Claves de Entidades (es-ES)
Volver a EF FAQ tabla de contenido
¿Entity Framework admite valores de clave generados por el servidor?
Sí!
El flujo de una nueva entidad típico con un valor de clave generados por el servidor se ve algo como esto:
Construir la instancia de la entidad.
En este punto las propiedades claves todos tienen valores predeterminados (nulos o 0).
Agregar la instancia a su contexto.
Una clave temporal se crea y se utiliza para almacenar la entidad en el ObjectStateManager.
Llamar SaveChanges en el contexto.
El EF genera una instrucción SQL INSERT (o la invocación de un procedimiento almacenado si está especificado así en la asignación) y lo ejecuta.
EF escribe el valor generado por el servidor a la ObjectStateEntry para la entidad.
Esto supone, desde luego, que sucedió a la pieza de enganche y que el SSDL fue configurado correctamente para indicar que hay un valor generado por el servidor.
Afortunadamente, si el SSDL se genera a partir del esquema de base de datos con una herramienta, esta configuración se realiza automáticamente como parte de esa generación.
El ObjectStateEntry inserta el valor generado por el servidor en la propia entidad.
Código de nivel inferior del EF utiliza la interfaz de DataRecord en el ObjectStateEntry para leer y escribir los valores de la entidad.
El ObjectStateEntry garantiza que el objeto de la entidad y la interfaz de DataRecord siempre contienen los mismos datos (para actual valora el DataRecord, de hecho, está virtualizado sobre la entidad en lugar de almacenar su propia copia de los datos).
Cuando AcceptChanges está invocada en el ObjectStateEntry, un EntityKey permanente se calcula utilizando los valores clave de propiedad nueva y exclusiva.
El ObjectStateManager entonces hace una corrección interna, reemplazando todas las instancias de la clave temporal con la nueva clave permanente.
Para configurar el EF de un valor de clave generados por el servidor, sólo necesita el atributo StoreGeneratedPattern a establecerse en la columna de base de datos en el SSDL.
Para una clave que normalmente debe ser establecido en la "Identidad", que significa que el valor se genera cuando la fila se inserta, pero no va a cambiar después de eso.
Para otras propiedades generados por el servidor que desee utilizar el valor "Computed", lo que significa que cambiará cada vez que se actualiza la fila.
¿Puedo crear una nueva entidad con una clave generada por el servidor y un conjunto de entidades nuevas relacionadas que tienen una clave externa a esa entidad en una única actualización?
Sí.
Puede crear gráficos arbitrariamente complejos de entidades con valores generados por el servidor y el sistema puede manejar las inserciones de esos gráficos todos en una única llamada a SaveChanges.
¿Puedo utilizar una propiedad GUID como parte de una clave de entidad?
Sí.
Puede usar un GUID en el modelo conceptual como una propiedad normal o una clave principal.
Sin embargo, hay una limitación que la EF no admite claves primarias cuyo tipo es binario.
Lo que esto significa en la práctica es si la base de datos tiene una columna de tipo "uniqueidentifier", entonces la generación automática modelo reconocerá que contiene un GUID y configurar la propiedad correspondiente en el modelo conceptual que un GUID, pero si su columna en la base de datos es de tipo binario con una longitud de 16 bytes, entonces la generación automática modelo hará que al tipo de la propiedad en el modelo conceptual una matriz de bytes de longitud 16
, y que no puede ser la clave principal de la entidad.
Si vas en el diseñador, puede modificar manualmente el tipo de la propiedad de modelo conceptual a un GUID en lugar de una matriz de bytes y, a continuación, la propiedad puede ser la clave de entidad de ese tipo.
En ese momento, usted recibirá errores desde el sistema de asignación diciendo que no se puede asignar un GUID en un binario de 16 bytes.
Para corregir que usted deberá abrir el archivo EDMX en el editor XML (o editar el archivo SSDL si no está utilizando el diseñador) y cambiar los metadatos de la columna en la base de datos para afirmar que es un uniqueidentifier en lugar de un binario de 16 bytes.
Después de todo esto se realiza, el EF identificará la columna como un uniqueidentifier, que muy bien se asigna a un GUID.
¿Puedo usar un GUID generados por el servidor como mi clave de entidad?
Es compatible con EF 4.
Para obtener más información, consulte
trabajando con claves de entidad
.
En EF 3.5 SP1 este no es compatible.
Aunque es posible con SQL Server para tener una columna de tipo 'uniqueidentifier' y establece su valor predeterminado a ser 'newid()', con SQL Server 2000 no hay buena forma para extraer el valor que genera el servidor en el momento de que hacer la inserción.
¿Si utilizo GUID para mis llaves, puedo generarles en el cliente, en lugar de en el servidor?
Sí se puede.
Hay una cosa a tener en cuenta, sin embargo: el método de generación de GUID por defecto crea GUID, que puede hacer para índices muy ineficientes en la base de datos.
Siempre que sea posible se recomienda utilizar un entero generados por el servidor o algo similar para las propiedades clave de una entidad.
¿Cómo tratar las claves de longitud fija?
Los siguientes enlaces tienen información relacionada con este tema:
Trabajo con EntityKeys
Sugerencia 20 cómo tratar las claves de longitud fija
EF 4 - POCO - recorte de propiedades de entidades
Volver a EF FAQ tabla de contenido
Entity Framework
,
es-ES
,
faq
,
Rick Saling
[Edit tags]
Leave a Comment
Please add 7 and 3 and type the answer here:
Post
Wiki - Revision Comment List(Revision Comment)
Wikis - Comment List