Recibo este error al escribir en la base de datos:
Una propiedad dependiente en un ReferentialConstraint se asigna a una columna generada por la tienda. Columna: 'PaymentId'.
public bool PayForItem(int terminalId, double paymentAmount,
eNums.MasterCategoryEnum mastercategoryEnum, int CategoryId, int CategoryItemId)
{
using (var dbEntities = new DatabaseAccess.Schema.EntityModel())
{
int pinnumber = 0;
long pinid = 1; //getPinId(terminalId,ref pinnumber) ;
var payment = new DatabaseAccess.Schema.Payment();
payment.CategoryId = CategoryId;
payment.ItemCategoryId = CategoryItemId;
payment.PaymentAmount = (decimal)paymentAmount;
payment.TerminalId = terminalId;
payment.PinId = pinid;
payment.HSBCResponseCode = "";
payment.DateActivated = DateTime.Now;
payment.PaymentString = "Payment";
payment.PromotionalOfferId = 1;
payment.PaymentStatusId = (int)eNums.PaymentStatus.Paid;
//payment.PaymentId = 1;
dbEntities.AddToPayments(payment);
dbEntities.SaveChanges();
}
return true;
}
El esquema es:
c#
sql-server-2008
linq-to-sql
entity-framework-4
Rey galés
fuente
fuente
(e as System.Data.Entity.Infrastructure.DbUpdateException).Entries
), puede ver qué tabla contiene la clave principal a la que se hace referencia.Este error dice que está utilizando una relación no admitida o tiene un error en su mapeo. Es muy probable que su código no tenga ninguna relación con el error.
El error significa que tiene alguna relación entre entidades donde la propiedad de clave externa en la entidad dependiente se define como generada por la tienda. Las propiedades generadas por la tienda se rellenan en la base de datos. EF no admite propiedades generadas por la tienda como claves externas (así como propiedades calculadas en claves primarias).
fuente
PaymentID
y maneje con ella.Yo tuve el mismo problema. Según las respuestas proporcionadas aquí, pude rastrearlo y resolverlo, pero tuve un problema extraño que se describe a continuación: podría ayudar a alguien en el futuro.
En mis tablas dependientes, las columnas de clave externa se han establecido en StoreGeneratedPattern = "Identity". Tuve que cambiarlo a "Ninguno". Desafortunadamente, hacerlo dentro del diseñador no funcionó en absoluto.
Busqué en el XML generado por el diseñador (SSDL) y estas propiedades todavía estaban allí, así que las eliminé manualmente. También tuve que arreglar las columnas en la base de datos (eliminar la Identidad (1,1) de CREATE TABLE SQL)
Después de eso, el problema desapareció.
fuente
Tuve el mismo problema y después de investigar un poco el diseño de la tabla en el servidor SQL, descubrí que, por error, configuré la clave principal de la tabla también como clave externa.
En esta imagen, puede ver que JobID es la clave principal de la tabla, pero también es una clave foránea por error.
fuente
Mi problema fue causado por la definición redundante de la clave principal en la configuración.
Quitar esta línea
Ejemplo http://www.entityframeworktutorial.net/code-first/configure-one-to-one-relationship-in-code-first.aspx
Esto es suficiente para definir la relación.
fuente
Vuelva a verificar la relación entre Pago y las otras tablas / entidades. Incluyendo los que no deberían contener PaymentId porque ahí es donde es más probable que se esconda el problema.
Al crear claves foráneas en SQL Server Management Studio, la clave principal está predeterminada, y esta predeterminada se revierte cuando se cambia la tabla principal, así que tenga cuidado de cambiar los valores en el orden correcto en la ventana "Tablas y columnas".
Además, una vez que haya solucionado la relación problemática, es muy probable que un simple "Actualizar" en el modelo no elimine correctamente la relación errónea del modelo y obtendrá el mismo error incluso después de la " reparación ", así que hágalo usted mismo en el modelo antes de realizar una actualización. (Descubrí esto por las malas).
fuente
Si ha comprobado sus relaciones y está bien allí.
Elimine la tabla en el edmx y luego actualice desde la base de datos. Esto le evitará realizar la actualización manualmente.
fuente
Para mí, era una clave externa colocada incorrectamente en la tabla, pero incluso después de alterar la tabla para arreglarla, todavía no funcionaba. Debe actualizar los archivos EDMX (y no lo suficiente para "actualizar" la tabla del modelo, debe eliminar y agregar la tabla nuevamente en el modelo).
fuente
Además de la respuesta aceptada, si está utilizando el generador EF Reverse POCO o alguna otra herramienta que genere sus POCO, ¡asegúrese de regenerarlos !
fuente
En mi caso, el problema fue causado por tener una relación 1-1 de dos vías:
Simplemente tuve que eliminar una de las dos claves externas (no es necesario de todos modos).
fuente
En mi caso, fue simplemente que no tenía los permisos establecidos correctamente en la base de datos. Había leído solo un conjunto y Entity framework me estaba dando un error ReferentialConstraint que me desconcertó. Se agregaron permisos de escritura adicionales y todo estuvo bien.
fuente
En mi caso, tenía una propiedad de base de datos generada y una propiedad de navegación ForeignKey configurada para hacer referencia a una tabla relacionada 1 a 1.
Esto no era algo que pudiera eliminar, necesitaba poder configurar la clave principal de la entidad para que se generara en la base de datos Y necesitaba poder hacer referencia a la tabla 1 a 1 como una propiedad de navegación.
No estoy seguro de si esto es lo mismo para otros, pero este problema solo aparecía cuando se creaba una nueva entidad, leer o editar entidades existentes no mostraba el problema, así que solucioné el problema creando una versión heredada de mi contexto y usando el método Fluent para desactivar la propiedad de navegación al crear.
Entonces, mi entidad original se veía así:
Así que hice un contexto heredado especial que se veía así:
y luego cambió el código que creó la nueva entidad para hacer usuario del nuevo tipo de contexto
Espero que esto ayude a alguien
fuente
En mi caso, el campo Id que FK solo en Entity Framework, la propiedad "StoreGeneratedPattern" se estableció en "Itentity" en lugar de "None"
fuente