Pregunta

Tengo dos tablas en un (MSSQL 2008 R2) base de datos existente que están relacionados por una tabla de enlace.

Los dos cuadros son "Plan" y "consejos". La mesa de enlace es "PlanTipLinks".

Los planes pueden tener muchos consejos y sugerencias pueden ser asociado con varios planes (es decir, es una relación de muchos a muchos). En la aplicación, lo único que importa acerca de la relación "Plan.Tips". No necesito los Tip.Plans relación inversa.

Las referencias de clave externa en la tabla de enlace no puede ser nulo.

Estoy usando el siguiente código API fluida para mapear esta relación:

modelBuilder.Entity<Plan>()
    .HasMany(p => p.Tips)
    .WithMany()
    .Map("PlanTipLinks", (p, t) =>
        new
        {
            PlanId = p.Id,
            TipId = t.Id
        });

Esto crea las entradas correctas en la tabla. El problema es que, cuando se borra un plan, me sale una excepción de clave externa en la tabla PlanTipLinks.

Es de suponer que tengo que decirle que caen en cascada en la tabla PlanTipLinks cuando se elimina un plan, pero no estoy seguro de cómo hacerlo. No parecen ser capaces de llamar al método WillCascadeOnDelete utilizando los métodos hasMany / WithMany.

¿Qué me estoy perdiendo aquí?

¿Fue útil?

Solución

A partir de EF CTP4, no hay manera de directamente activar eliminaciones en cascada en muchos a muchos por asociaciones API Fluido.

Dicho esto, si su intención es asegurarse de que se puede eliminar el principio (por ejemplo, un Plan de registro) sin tener que preocuparse por el registro dependiente de la mesa de enlace (es decir, PlanTipLinks ), entonces no es necesario para activar cascadas en la base de datos desde el Código EF primero se hará cargo de las eliminaciones en cascada en el lado del cliente cuando se trata de asociaciones muchos a muchos.

Por ejemplo, cuando se elimina un Plan de objeto, el código es el primer suficientemente inteligente como para primero enviar una instrucción de eliminación para deshacerse del registro depende de la PlanTipLinks mesa y después de que enviará otra instrucción de eliminación para eliminar el registro plan.

Para obtener más información, por favor, eche un vistazo a la siguiente mensaje:
EF CTP4 eliminación en cascada de muchos a muchos

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top