Pregunta ¿Por qué ON DELETE SET NULL aún no está implementado en Entity Framework 6? ¿Hay algún inconveniente?


Todavía no es posible configurar una relación con la regla ON DELETE SET NULL utilizando primero el código de Entity Framework. Como solución, debe cargar todas las entidades relacionadas en la memoria y entonces al eliminar la entidad principal EF emitirá comandos SQL para establecer sus claves foráneas en Nulo.

Esto, aunque es trivial implementarlo usted mismo usando algo como:

protected override void Seed(Context context)
{
    context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests DROP CONSTRAINT Guest_PreferredLanguage");
    context.Database.ExecuteSqlCommand("ALTER TABLE dbo.Guests ADD CONSTRAINT Guest_PreferredLanguage FOREIGN KEY (LanguageID) REFERENCES dbo.Languages(LanguageID) ON UPDATE NO ACTION ON DELETE SET NULL");
}

(Ejemplo tomado de esta publicación.)

No veo problemas con este enfoque: las entidades secundarias cargadas permanecerán sincronizadas con la base de datos porque EF actualizará (configurará como nulo) sus claves foráneas y propiedades de referencia, y que los demás registros en la base de datos se verán afectados no perjudicará no se ha cargado de todos modos.

Entonces, ¿por qué esta característica todavía falta? ¿Hay algún problema oculto?


32
2018-01-05 09:46


origen


Respuestas:


La característica probablemente no se implemente porque normalmente los cambios solo afectan a los objetos que están realmente en la unidad de trabajo. Las cascadas no son escalables.

Y también creo que las eliminaciones suaves son mejores en la mayoría de los casos. Tal vez eso es algo para ti?

Es posible que también desee examinar el diseño impulsado por el dominio. Eso también cubre el uso correcto de las unidades de trabajo (con agregados).

Por cierto, su solución edita la base de datos en el método de semilla. Podría ser mejor hacer un método Up () de una migración.


2
2018-06-29 10:14