Нулевой внешний ключ EF Core Fluent API - PullRequest
0 голосов
/ 16 июня 2020

У меня есть следующие таблицы: Products, Users и ProductApproval. Каждый раз, когда пользователь создает новый продукт, ProductApproval будет иметь новую запись с идентификатором продукта и нулевым ApprovedByUserId, потому что он еще не утвержден. Пользователь может иметь несколько ProductApproval, но ProductApproval может быть только один.

Структура выглядит следующим образом:

User.cs

public class User
{
    public int Id { get; set; }
    public string Username { get; set; }

    public virtual ICollection<ProductApproval> ProductApprovals { get; set; }

    public User()
    {
       ProductApprovals = new Collection<ProductApproval>();
    }
}

Product.cs

public class Product
{
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ProductApproval ProductApproval { get; set; }
}

ProductApproval.cs

public class ProductApproval
{
   public int Id { get; set; }

   public virtual Product Product { get; set; }
   public int? ProductId { get; set; }

   public virtual User User { get ;set; }
   public int? ApprovedByUserId { get; set; }

}

DataContext.cs

modelBuilder.Entity<User>()
   .HasMany(u => u.ProductApprovals)
   .WithOne(pa => pa.User)
   .HasForeignKey(pa => pa.ApprovedByUserId)
   .IsRequired(false);

modelBuilder.Entity<Product>()
   .HasOne(p => p.ProductApproval)
   .WithOne(pa => pa.Product)
   .HasForeignKey<ProductApproval>(pa => pa.ProductId);

Я уже объявил внешний ключ ApprovedByUserId как допускающий значение NULL, но я все равно получаю следующую ошибку, когда вставляю запись в утверждении продукта: MySqlException: невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (mysite. productapprovals, ОГРАНИЧЕНИЕ FK_ProductApprovals_Users_ApprovedByUserId ИНОСТРАННЫЙ КЛЮЧ (ApprovedByUserId) ССЫЛКИ users (Id ) ON DELETE RESTRICT)

Пожалуйста, посоветуйте, есть ли где-нибудь, где я сделал не так

...