2009-12-18 24 views
12

El rediseño de una gran base de datos en nuestra compañía hace un uso extenso de claves primarias compuestas en la base de datos.Claves de base de datos compuestas con Entity Framework 4.0

Olvidando los impactos en el rendimiento, ¿esto causará alguna dificultad al trabajar con este db en Entity Framework 4.0? Es poco probable que la estructura de la base de datos cambie y no estoy buscando un debate "filosófico", pero ¿cuáles son los impactos prácticos?

De acuerdo con Jeremy Miller, "La clave compuesta hace que cualquier tipo de mapeo/persistencia relacional y de objetos en general sea más difícil". pero él realmente no dice por qué. ¿Tiene esto relación con la forma en que Entity Framework 4.0 maneja las claves?

Respuesta

13

No, EF4 admite llaves compuestas muy bien.

El problema es una tabla con una clave sustituta y claves compuestas. Solo puede establecer una sola clave en cada modelo; esa clave puede tener múltiples campos, pero solo puede tener una desde el punto de vista del diseñador. No estoy seguro acerca de la edición manual de mapeo xml o solo código.

Puede establecer un campo como una Identidad y no una clave si necesita una clave compuesta y sustituta en la misma tabla. El campo Identidad (Id) no será utilizado por ObjectContext o ObjectStateTracker, pero se incrementará y se podrá consultar sin problemas.

8

He tenido problemas con llaves EF4 y compuestas. No admite columnas que se utilizan como componentes en más de una clave en una tabla de unión.

Consulte mi pregunta anterior Mapping composite foreign keys in a many-many relationship in Entity Framework para obtener más información. Las tuercas de esto es que cuando se tiene una tabla de unión (que describe una relación de muchos a muchos), donde ambas de las relaciones utilice una clave común, obtendrá un error como

Error 3021: Problema en el mapeo fragmentos ...: Cada una de las siguientes columnas en PageView tabla se asigna a múltiples propiedades secundarios conceptuales: PageView.Version se asigna a (PageView_Association.View.Version, PageView_Association.Page.Version)

La única forma de evitarlo era duplicar la columna que derrota el propósito de tenerlo allí.

¡Buena suerte!

+6

Ridiculously molesto. –

Cuestiones relacionadas