Я пытаюсь добавить некоторые недавно созданные объекты в свою базу данных, но EF бросает InvalidOperationException
с сообщением The relationship could not be changed because one or more of the foreign-key properties is non-nullable
но это не говорит мне, какие отношения.
Вот соответствующие организации:
DatabaseContext OnModelCreating:
...
modelBuilder.Entity<Student>()
.HasRequired(s => s.Home)
.WithMany(s => s.StudentsInResidence)
.HasForeignKey(s => s.HomeId);
modelBuilder.Entity<SignoutRequest>()
.HasOptional(x => x.Destination)
.WithMany(x => x.RequestsToHere)
.HasForeignKey(x => x.DestinationId);
modelBuilder.Entity<SignoutRequest>()
.HasRequired(x => x.Subject)
.WithMany(x => x.SignoutRequests)
.HasForeignKey(x => x.SubjectId);
...
SignoutRequest:
public class SignoutRequest
{
public SignoutRequest()
{
}
public int Id { get; set; }
public string SubjectId { get; set; }
...
public int? DestinationId { get; set; }
#region Custom Fields
...
#endregion
#region Virtual Properties
...
public virtual Student Subject { get; set; }
public virtual DeviceGroup Destination { get; set; }
#endregion
}
Студент:
public class Student : IWpEntity
{
public string Id { get; set; }
public string Name { get; set; }
public string EmailAddress { get; set; }
public string PhoneNumber { get; set; }
public int Form { get; set; }
public int HomeId { get; set; }
public virtual DeviceGroup Home { get; set; }
public virtual ICollection<BlacklistEntry> BlacklistEntries { get; set; }
public virtual ICollection<SignoutRequest> SignoutRequests { get; set; }
}
DeviceGroup:
public class DeviceGroup : IWpEntity
{
public int Id { get; set; }
public string FriendlyName { get; set; }
public virtual ICollection<Device> Devices { get; set; }
public virtual ICollection<Student> StudentsInResidence { get; set; }
public virtual ICollection<SignoutRequest> RequestsToHere { get; set; }
}
IWpEntity - это всего лишь набор методов.
И вот код, который вызывает ошибку:
_database.SubmittedRequests.Add(srq);
await _database.SaveChangesAsync();
srq
- это SignoutRequest
который я пытаюсь добавить в базу данных. Он уже имеет свойства SubjectId
и DestinationId
установленные для действительных идентификаторов объектов, уже находящихся в базе данных.
Я понятия не имею, почему, но я избавился от IWpEntity и начал работать. Я совершенно смущен, и я понятия не имею, почему это может повлиять на базу данных. Дизайн базы данных в Sql Management Studio выглядит одинаково.