Les suppressions en cascade avec Entity Framework entités Liées à supprimé par EF

J'ai un problème avec la suppression dans le Cadre de l'Entité. En bref, EF explicitement essaie de supprimer une entité à partir de la base de données, même si j'ai explcitly configuré EF utiliser les suppressions en cascade dans la base de données.

Ma conception:

J'ai trois types d'entité, MainEntity, EntityTypeA et EntityTypeB. EF a été configuré pour l'utilisation en cascade la suppression lors de la suppression de EntityTypeA et EntityTypeB. En d'autres termes, si je supprime une instance de MainEntity, je veux tous liés EntityTypeA et EntityTypeB cas être supprimé. Je n'ai jamais supprimer EntityTypeA ou EntityTypeB sans également la suppression de leur parent.

Mon problème est que EF explicitement les questions un DELETE déclaration pour EntityTypeA, ce qui provoque mon application crash.

C'est ce que mon modèle de ressembler à:

Les suppressions en cascade avec Entity Framework entités Liées à supprimé par EF

Les relations de non-config par défaut:

  • MainEntity -> EntityTypeA OnDelete: Cascade
  • MainEntity -> EntityTypeB OnDelete: Cascade

La relation EntityTypeA -> EntityTypeB a OnDelete: None

Base de données de contenu

INSERT INTO MainEntities (Name) values ('Test')
insert into EntityTypeA (MainEntityID) VALUES (1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)

Mon code:

class Program
{
   static void Main(string[] args)
   {
      var context = new Model1Container();
      var mainEntity = context.MainEntities.Include("EntityTypeA").SingleOrDefault();
      context.DeleteObject(mainEntity);
      context.SaveChanges();
   }
}

Ce qui se passe

Quand je l'appelle SaveChanges, Entity Framework exécute les opérations suivantes dans la base de données:

exec sp_executesql N'delete [dbo].[EntityTypeA]
where ([Id] = @0)',N'@0 int',@0=1

Ce qui provoque une violation de clé étrangère, parce qu'il y a des éléments dans EntityTypeB table du référencement EntityTypeA instances.

Question

Pourquoi ne Entity Framework question explicite pour supprimer l'instance de EntityTypeA, même si j'ai configuré Entity Framework à utiliser les suppressions en cascade? Si je supprime la fonction include("EntityTypeA"), il commence à travailler à nouveau.

  • L'image (de votre modèle) n'est pas disponible
InformationsquelleAutor Nitramk | 2011-03-27