2013-08-29 20 views
6

Istnieją dwa podmioty takie jak poniżej:Entity Framework: Jak włączyć kaskada usuwać na jedną stronę podmiotami powiązanymi

public class Business 
{ 
    public int Id {get; set;} 

    public File Logo {get; set;} 
    public int? LogoId {get; set;} 

    public File Video {get; set;} 
    public int? Video {get; set;} 

    public ICollection<File> Images {get; set;} 
} 

public class File 
{ 
    // some file props, such as Id, Name, ... 
} 

Jak mogę skonfigurować kaskada usuwać pliki w interesach usunąć? Należy pamiętać, że nie potrzebuję żadnej nawigacji od File do Business.

UPDATE:

można znaleźć konfigurację ModelBuilder jak ryk:

 modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 

     modelBuilder.Entity<Entities.Business>() 
      .HasOptional(b => b.Logo) 
      .WithOptionalPrincipal() 
      .WillCascadeOnDelete(); 

     modelBuilder.Entity<Entities.Business>() 
      .HasOptional(b => b.Video) 
      .WithOptionalPrincipal() 
      .WillCascadeOnDelete(); 

     modelBuilder.Entity<Entities.Business>() 
      .HasMany(b => b.Images) 
      .WithOptional() 
      .WillCascadeOnDelete(); 

i tu jest błąd Mam:

Introducing FOREIGN KEY constraint 'FK_dbo.Files_dbo.Businesses_Business_Id1' on table 'Files' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint

+0

Kod Najpierw? Model pierwszy? Baza danych pierwsza? – Matten

+0

Próbuję kod pierwszy. –

Odpowiedz

5

Jeśli chcesz użyć konfiguracji oddzielna klasy, które możesz wypróbować:

public class BusinessConfiguration : EntityTypeConfiguration<Business> 
    { 
     public BusinessConfiguration() 
     { 
      HasMany(x => x.Images).WithOptional().WillCascadeOnDelete(); 
      HasOptional(x => x.Logo).WithOptional().WillCascadeOnDelete(); 
      HasOptional(x => x.Video).WithOptional().WillCascadeOnDelete(); 
     } 
    } 

Jeśli nie przejdziesz lambda w zakresie .WithOptional() lub .WithRequired() oznacza to, że druga strona nie ma właściwości nawigacyjnych.

+0

oops! Wystąpił błąd: Wprowadzenie ograniczenia klucza OBCEGO "FK_dbo.Files_dbo.Businesses_Business_Id1" w tabeli "Pliki" może powodować cykle lub wiele ścieżek kaskadowych. Określ ON DELETE NO ACTION lub ON UPDATE NO ACTION lub zmodyfikuj inne ograniczenia klucza OBCEGO. –