Na verschillende google en msdn pagina's gelezen te hebben kom ik nog niet helemaal uit on cascade deleting. Ik heb een standard MVC 5 webapp gemaakt in visualstudio en de ApplicationUser class aangepast als volgt:
De Naam class ziet er zo uit:
De applicationDbContext heb ik aangepast zodat cascade delete aan staat zoals hier weergegeven:
Nu had ik verwacht als ik de gebruiker weg zou gooien dat de gerelateerde record in de "Naam" table ook weggegooid zou worden, maar dit is niet het geval.
Wat ik geprobeert heb is op het model op verschillende manieren aan te maken en alle mogelijke vormen van de migraties heb getest. Ik snap niet wat ik hier verkeerd doe. Een 1 op 1 relatie d.m.v. het Entity Framework hoeft toch niet zo lastig te zijn?
DataAnnotations en Fluent API beide geprobeerd, beide wil hier helaas niet werken.
Daarnaast vroeg ik mij af of het wel een best practice is om de ApplicationUser class uit te breiden of is het verstandiger om een eigen User class te maken welke erft van ApplicationUser.
C#:
1
2
3
4
5
| public class ApplicationUser : IdentityUser { public ApplicationUser() { } public virtual Naam Naam { get; set; } } |
De Naam class ziet er zo uit:
C#:
1
2
3
4
5
6
7
| public class Naam { public int NaamId { get; set; } public string Voornaam { get; set; } public string Achternaam { get; set; } public string Tussenvoegsels { get; set; } } |
De applicationDbContext heb ik aangepast zodat cascade delete aan staat zoals hier weergegeven:
C#:
1
2
3
4
5
6
7
8
9
10
11
| protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); modelBuilder.Entity<Naam>() .HasOptional(a => a.User) .WithOptionalDependent() .WillCascadeOnDelete(true); base.OnModelCreating(modelBuilder); } |
Nu had ik verwacht als ik de gebruiker weg zou gooien dat de gerelateerde record in de "Naam" table ook weggegooid zou worden, maar dit is niet het geval.
C#:
1
2
3
4
5
6
| var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); var currentUser = userManager.FindById(User.Identity.GetUserId()); currentUser.Naam = new Naam() { Voornaam = "Jan", Achternaam = "Jansen", Tussenvoegsels = "" }; userManager.Update(currentUser); userManager.Delete(currentUser); |
Wat ik geprobeert heb is op het model op verschillende manieren aan te maken en alle mogelijke vormen van de migraties heb getest. Ik snap niet wat ik hier verkeerd doe. Een 1 op 1 relatie d.m.v. het Entity Framework hoeft toch niet zo lastig te zijn?
DataAnnotations en Fluent API beide geprobeerd, beide wil hier helaas niet werken.
Daarnaast vroeg ik mij af of het wel een best practice is om de ApplicationUser class uit te breiden of is het verstandiger om een eigen User class te maken welke erft van ApplicationUser.