sql >> Base de Datos >  >> RDS >> Sqlserver

EF4.1:¿Es posible tener una relación de cero o uno a cero o uno (0..1 a 0..1)?

No, no es posible y dudo que funcione en el servidor SQL. La relación de la base de datos requiere que un extremo se vuelva dependiente. Significa que hace referencia a la clave principal (PK) de un extremo principal; a esta clave la llamamos clave externa (FK). Si hablamos de relación uno a uno, el FK debe marcarse como único para que solo un registro en la tabla dependiente pueda hacer referencia a un registro dado de la tabla principal. La única relación válida en este caso es 0..1 - 1 donde el principal puede existir sin dependiente pero el dependiente solo puede existir cuando está relacionado con el principal existente porque su valor FK debe establecerse en el valor PK del principal. Teóricamente, FK puede ser anulable, pero depende de la forma en que la base de datos implemente restricciones únicas. Si la base de datos cuenta nulo como otro valor único, solo un registro dependiente puede tener FK establecido en nulo (creo que este es un caso de servidor SQL).

En EF, esto es aún más complicado porque EF no admite restricciones únicas y, por eso, puede crear una relación uno a uno solo cuando la entidad dependiente de FK también es su PK (=no hay forma de establecerlo en nulo). Si no puede establecer FK en nulo, no puede tenerlo anulable y debido a que la entidad principal debe existir, de lo contrario, la integridad referencial arrojará un error.

La mejor solución para usted es considerar Request como entidad principal y Result como dependiente. La solicitud debe crearse primero y debe mantenerse en la base de datos mientras el Result . Result debe tener el mismo valor de PK (la columna no se puede incrementar automáticamente) que la correspondiente Request (y PK debe ser FK para Request ).