EF добавление сущности: отношение не может быть изменено, поскольку одно или несколько свойств внешнего ключа не могут иметь значение NULL

1

Я пытаюсь добавить некоторые недавно созданные объекты в свою базу данных, но 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 установленные для действительных идентификаторов объектов, уже находящихся в базе данных.

Теги:
sql-server
entity-framework

1 ответ

0

Я понятия не имею, почему, но я избавился от IWpEntity и начал работать. Я совершенно смущен, и я понятия не имею, почему это может повлиять на базу данных. Дизайн базы данных в Sql Management Studio выглядит одинаково.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню