Quiero crear una nueva fila en mi base de datos en una tabla que tenga un par de relaciones de claves foráneas y no he podido conocer qué orden y qué llamadas deben realizarse. Esto es lo que tengo hasta ahora:¿Cómo crear relaciones de claves foráneas con Entity Framework?
db.Models.Order order = DB.Models.Order.CreateOrder(apple);
order.CustomerReference.Attach((from c in db.Customer where c.Id == custId select c).First());
db.SaveChanges();
El código está fallando en la segunda línea allí, diciendo:
Acople no es una operación válida cuando el objeto de origen asociado con este fin relacionado está en un estado agregado, eliminado, o separado. Los objetos cargados utilizando la opción de fusión NoTracking son siempre separados.
¿Alguna idea?
No me importaría usar su solución, pero me gustaría utilizar los nombres de columna de base de datos de tipo fuerte para que pueda obtener en tiempo de compilación si la relación es inválida – Jared
Estoy de acuerdo con kirkmcpherson, su forma de evitar el SELECT extra. Supongo que valoras el código que se puede mantener sobre el rendimiento. Todavía puede usar su camino, pero en lugar de cadenas codificadas, puede usar la reflexión para generar las cadenas obteniendo los nombres de clase para ModelsEntities y Customers en el ejemplo anterior. De esta forma obtienes tanto uno menos SELECCIONAR, y fuertes errores de tipeo/tiempo de compilación. La sobrecarga adicional de la reflexión no debería ser un problema de la OMI. – jamiebarrow
De acuerdo, puede usar el reflejo para generar el nombre del conjunto de entidades, pero no el nombre de clave (es decir, puede generar "ModelsEntities.Customers" usando el tipado fuerte). ¿Hay alguna manera de generar el "Id" usando la reflexión? – jamiebarrow