#entity-framework #.net-core #ef-fluent-api
#entity-framework #.net-ядро #ef-fluent-api
Вопрос:
Существует One to Many
взаимосвязь между Catergory и Product. В одном каталоге будет много продуктов. Однако, когда я пытаюсь удалить каталог, и если есть продукт с этим каталогом, мне не должно быть разрешено это делать.
В коде, который я написал, он разрешает удаление. Когда я удаляю каталог, он также удаляет связанный продукт. Что я хочу, чтобы мой код делал, так это запретить мне удалять каталог, если есть соответствующие записи.
Может кто-нибудь помочь мне разобраться в этом.
Catergory
public class Catergory
{
public int CatergoryId { get; set; }
public string CatergoryName { get; set; }
public string CatergoryDescription { get; set; }
public ICollection<Product> Products { get; set; }
}
Продукт
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
public string ProductDescription { get; set; }
public int CatergoryID { get; set; }
public Catergory Catergory { get; set; }
}
Использование Fluent API для сопоставления отношений
Конфигурация CatergoryConfiguration
class CatergoryConfiguration : IEntityTypeConfiguration<Catergory>
{
public void Configure(EntityTypeBuilder<Catergory> builder)
{
builder.ToTable("Catergory");
builder.HasKey(c => c.CatergoryId);
builder.Property(c => c.CatergoryName)
.IsRequired(true)
.HasMaxLength(400);
builder.Property(c => c.CatergoryDescription)
.IsRequired(true);
}
}
ProductConfig
public void Configure(EntityTypeBuilder<Product> builder)
{
builder.ToTable("Product");
builder.HasKey(p => p.ProductID);
builder.Property(p => p.ProductName)
.HasMaxLength(400)
.IsRequired(true);
builder.Property(p => p.ProductDescription)
.HasMaxLength(2000)
.IsRequired(true);
builder.HasOne(f => f.Catergory)
.WithMany(r => r.Products)
.HasForeignKey(f => f.CatergoryID);
.OnDelete(DeleteBehavior.Restrict);
}
}
Ответ №1:
К сожалению, вы не можете настроить это во FluentAPI. OnDelete
задайте поведение обработки связанных объектов только при удалении основного объекта.
В вашем методе удаления вам необходимо включить логику, чтобы проверить, имеет ли a Category
Products
перед удалением.