Supprimer parents avec des enfants d'un à plusieurs " de la relation

J'ai un .NET4.0 application avec Entity Framework 5.0 e Sql Server CE 4.0.

J'ai deux entités avec un un-à-plusieurs (parent/enfant) de la relation. Je l'ai configuré pour effacer en cascade sur les parents de suppression, mais pour quelque raison il ne semble pas fonctionner.

Voici une version simplifiée de mon entités:

    public class Account
{
public int AccountKey { get; set; }
public string Name { get; set; }
public ICollection<User> Users { get; set; }
}
internal class AccountMap : EntityTypeConfiguration<Account>
{
public AccountMap()
{
this.HasKey(e => e.AccountKey);
this.Property(e => e.AccountKey).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(e => e.Name).IsRequired();
}
}
public class User
{
public int UserKey { get; set; }
public string Name { get; set; }
public Account Account { get; set; }
public int AccountKey { get; set; }
}
internal class UserMap : EntityTypeConfiguration<User>
{
public UserMap()
{
this.HasKey(e => e.UserKey);
this.Property(e => e.UserKey).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.Property(e => e.Name).IsRequired();
this.HasRequired(e => e.Account)
.WithMany(e => e.Users)
.HasForeignKey(e => e.AccountKey);
}
}
public class TestContext : DbContext
{
public TestContext()
{
this.Configuration.LazyLoadingEnabled = false;
}
public DbSet<User> Users { get; set; }
public DbSet<Account> Accounts { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Conventions.Remove<StoreGeneratedIdentityKeyConvention>();
modelBuilder.LoadConfigurations();
}
}

La chaîne de connexion:

  <connectionStrings>
<add name="TestContext" connectionString="Data Source=|DataDirectory|\TestDb.sdf;" providerName="System.Data.SqlServerCe.4.0" />
</connectionStrings>

Et une version simplifiée de mon application de flux de travail:

static void Main(string[] args)
{
try
{
Database.SetInitializer(new DropCreateDatabaseAlways<TestContext>());
using (var context = new TestContext())
context.Database.Initialize(false);
Account account = null;
using (var context = new TestContext())
{
var account1 = new Account() { Name = "Account1^" };
var user1 = new User() { Name = "User1", Account = account1 };
context.Accounts.Add(account1);
context.Users.Add(user1);
context.SaveChanges();
account = account1;
}
using (var context = new TestContext())
{
context.Entry(account).State = EntityState.Deleted;
context.SaveChanges();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
Console.WriteLine("\nPress any key to exit...");
Console.ReadLine();
}

Lorsque je tente de supprimer l'entité mère, il lance:

La relation ne peut pas être changé parce que l'un ou plusieurs des
clé étrangère propriétés est pas les valeurs null. Lorsqu'une modification est apportée à un
relation, la clé étrangère de la propriété est définie sur une valeur null.
Si la clé étrangère ne prend pas en charge les valeurs null, une nouvelle relation
doit être défini, la clé étrangère de la propriété doit être assigné à un autre
valeur non nulle, ou sans rapport avec l'objet doit être supprimé.

Je crois que ma relation de configuration est ok (suivi de la documentation). J'ai également recherché lignes directrices sur la suppression des entités détachées.

Je ne peux vraiment pas comprendre pourquoi cette suppression ne fonctionne pas. Je veux éviter le chargement de tous les enfants, de les supprimer un par un et leur de la suppression de la mère, parce qu'il doit y avoir une meilleure solution que celle.

OriginalL'auteur Arthur Nunes | 2013-05-15