Entity framework problem z kaskadowym usuwaniem

Entity framework problem z kaskadowym usuwaniem
HB
  • Rejestracja:ponad 8 lat
  • Ostatnio:23 dni
  • Postów:11
0

Piszę model bazy metodą code first. Mam 2 proste klasy:

Kopiuj
public class User {
	[Key()]
	public int Id {get; set;}
	public string Name {get; set;}
	
	public int CampaignId {get; set;}
	[ForeignKey("CampaignId")]
	public virtual Campaign Campaign {get; set;}
}

public class Campaign {
	[Key()]
	public int Id {get; set;}
	public string Description {get; set;}
	
	public virtual List<User> Users {get; set;}
	
	public Campaign() {
		Users = new List<User>();
	}
}

Problem jest taki, że jeśli usunę jakąś kampanię, to zostaje usunięty również użytkownik, który był do niej przypisany. Chciałbym zrobić tak, by przy usuwaniu kampani wszyscy użytkownicy przypisani do niej zostali przypisani do np. pierwszej dostępnej. Jeśli takiej nie ma to ich kampania to null.

Napisałem więc coś takiego:

Kopiuj
        public static void SetCampaignToDefault(Campaign campaignToDelete) {
            using (var context = new DatabaseContext()) {
                foreach (var user in context.Users) {
                    if (user .Campaign.Id == campaignToDelete.Id) {
                        user .Campaign = context.Campaigns.ElementAt(1);
                    }
                }

                context.SaveChanges();
            }
        }

        public static void DeleteCampaign(Campaign campaignToDelete) {
            SetCampaignToDefault(campaignToDelete);
            using (var context = new DatabaseContext()) {

                context.Entry(campaignToDelete).State = System.Data.Entity.EntityState.Deleted;
                context.SaveChanges();
            }
        }

Jednak przy tej linijce: if (answer.Campaign.Id == campaignToDelete.Id) { dostaję błąd:

Kopiuj
An unhandled exception of type 'System.NullReferenceException' occurred in WindowsFormsApplication10.exe

Additional information: Object reference not set to an instance of an object.

Straszne problemy z entity mam. Niby proste rzeczy, a siedzieć nad tym można godzinami. Ostatnio z bazami bawiłem się przy użyciu starego sql. Tam może i wyciąganie danych przy użyciu c# było męczące, ale takich problemów nie było :/. Ktoś pomoże?

ekhart
  • Rejestracja:ponad 7 lat
  • Ostatnio:ponad rok
  • Lokalizacja:ekhart.pl
  • Postów:140
0

Wszystko masz napisane w błędzie. Sprawdź czy answer.Campaign albo campaignToDelete nie jest nullem.


Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.