Modelo de EntityFramework con múltiples claves

Estoy tratando de crear un modelo EDMX para la base de datos existente, la base de datos tiene el siguiente esquema (no es el mejor, pero esto es lo que tengo y no puedo cambiarlo):

Table: ObjectTypes (ObjectTypeID "Identity", ObjectName)
Data: 1, Customer
Data: 2, Agent

Table: Customers (CustomerID "Identity", FName, LName, AgentID)
Data:  1, FTest, LTest, 1

Table: Agent (AgentID "Identity", AgentName, AgentCommission)
Data:  1, TestAgent, 10.0

Table: Contacts (ContactID "Identity", ObjectTypeID, ObjectID, ContactName)
Data:  1, 1, 1, CustomerTestContact
Data:  2, 1, 1, CustomerTestContact2
Data:  3, 2, 1, AgentTestContact
Data:  4, 2, 1, AgentTestContact2

Ahora necesito crear entidades de Agentes y Clientes con propiedad de navegación a los contactos.

For contacts of agents: Agents A JOIN Contacts C ON A.AgentID = C.objId AND C.objType = 2
For contacts of customers: Customers Cust A JOIN Contacts C ON Cust.CustomerID = C.objId AND C.objType = 1

¿Cómo puedo hacer esto?

Intenté usar herencia (Cliente y Agente heredan de ObjectTypes) y luego agregar la condición para ObjectTypeID por clase (Cliente = 1, Agente = 2), pero recibo el error de que se puede hacer porque ObjectTypeID en ObjectTypes se define como Identidad columna.

No estoy seguro de ir por el camino correcto, pero no puedo encontrar otro.

En realidad, ni siquiera sé si es posible lograr esto con EF.

Gracias por su atención.

preguntado el 03 de mayo de 12 a las 16:05

@Pawel Gracias por ese enlace, pero tengo otro caso... La tabla de contactos tiene un "FK compuesto" de agente/cliente, Col1 tiene un valor real de PK, pero la segunda columna de una "clave compuesta" es PK de otra tabla (no de la misma tabla que Col1). Si fuera posible poner el valor de Col2 de la clave (codificada/o de otra manera), facilitaría las cosas :) Cuando uso agentObj.Contacts, necesito que sea como: ... Agentes A JOIN Contacts C ON A. AgentID = C.objId AND C.objType = 2. Para Customer debe ser Customers Cust JOIN Contacts C ON Cust.CustomerID = C.objID AND C.objType = 1 -

0 Respuestas

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.