2012-05-03 20 views
15

Actualmente estoy usando EF Code First 4.3 con migraciones habilitadas, pero migraciones automáticas desactivadas.Anotaciones de datos de Entity Framework anotaciones de .WillCascadeOnDelete (false);

Mi pregunta es simple, ¿existe un anotaciones de datos equivalente a la configuración del modelo .WillCascadeOnDelete (falso)

me gustaría decorar mi clase para que las relaciones de clave externa no desencadenan una eliminación en cascada.

Ejemplo de código:

public class Container 
{ 
    public int ContainerID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Output> Outputs { get; set; } 
} 

public class Output 
{ 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

public class OutputType 
{ 
    public int OutputTypeID { get; set; } 
    public string Name { get; set; } 
} 

me gustaría hacer algo como esto:

public class Output 
{ 
    [CascadeOnDelete(false)] 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    [CascadeOnDelete(false)]  
    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

De esta manera yo sería capaz de andamio la migración correctamente. que andamia las relaciones de claves foráneas que se eliminarán en cascada en este momento.

¿Alguna idea, aparte de usar la configuración del modelo?

+0

tener la misma pregunta. Encontré cómo habilitarlo [aquí] (http://stackoverflow.com/a/33276901/4625305), pero lo que quiero es deshabilitarlo solo para una relación. – AXMIM

Respuesta

19

No, no existe tal equivalente. Debe usar la API con fluidez para eliminar selectivamente la eliminación en cascada o debe eliminar la convención OneToManyCascadeDelete para eliminarla globalmente.

+0

eliminará la convención OneToManyCascadeDelete, eliminará la convención incluso si agrega anotaciones como [Obligatorio] a una clave externa? – FRoZeN

+0

La eliminación en cascada debe usarse solo para las relaciones que son necesarias y eliminar esta convención la romperá. Opcional simplemente se establece en nulo. –

+0

En caso de utilizar OneToManyCascadeDelete = false, ¿cómo habilitaría Cascade Delete selectivamente con anotaciones de datos? – ironic

2

crear una clase de asignación (la sintaxis de fluidez) y utilizar el código de abajo:

// add relationships "Post" and "User" to a "Comment" entity 
this.HasRequired(t => t.Post) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.PostID) 
    .WillCascadeOnDelete(false); // <--- 

this.HasOptional(t => t.User) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.UserID) 
    .WillCascadeOnDelete(false); // <--- 

Aquí hay una nice post sobre cómo realizar asignaciones fluidas si necesita más información.

+0

El enlace es roto. – AXMIM

0

Simplemente haga anulable la propiedad FK puede evitar que suceda eliminación en cascada:

public int? OutputTypeID { get; set; } 
Cuestiones relacionadas