У меня есть следующие таблицы: 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)
Пожалуйста, посоветуйте, есть ли где-нибудь, где я сделал не так