Entity framework problem z kaskadowym usuwaniem

0

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

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:

        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:

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?

0

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1