【问题标题】:OnDelete in EntityTypeBuilder<T> ASP.NET Core 2 Entity FrameworkEntityTypeBuilder<T> ASP.NET Core 2 实体框架中的 OnDelete
【发布时间】:2019-10-17 09:13:38
【问题描述】:

我使用以下模型构建器在我的数据库上设置我的关系。

在我的数据上下文中我有;

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasDefaultSchema(schema: DbGlobals.SchemaName);

    modelBuilder.AddConfiguration<Address>(new AddressConfiguration());
    /*reduced for brevity*/

    base.OnModelCreating(modelBuilder);
}

AddressConfiguration() 中我有以下内容;

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace Data.EF.Configuration
{
    internal class AddressConfiguration : DbEntityConfiguration<Address>
    {
        public override void Configure(EntityTypeBuilder<Address> entity)
        {
            entity.HasKey(x => x.Id);
            entity.Property(x => x.Latitude).HasColumnType($"decimal(9,6)").IsRequired();
            entity.Property(x => x.Longitude).HasColumnType($"decimal(9,6)").IsRequired();
            //I have tried the following but it says doesnt exist
            //entity.OnDelete(DeleteBehavior.Cascade);
        }
    }
}

现在我的地址模型有一个List&lt;Contact&gt; Contacts { get; set; }。如何配置模型。删除地址时删除级联?

我找到了以下链接;

Delete Cascade in EF Core

详细说明OnDelete 方法,但EntityTypeBuilder&lt;T&gt; 上似乎没有?

谁能告诉我我在这里做错了什么?

【问题讨论】:

  • 是的,当它试图删除一个项目时,由于 FK 引用,它会抛出一个错误。
  • 你试过.OnDelete(DeleteBehavior.Cascade)吗?
  • @viveknuna 是的,我收到 does not contain a defination for OnDelete 错误,我将更新问题以包含我的 using 语句
  • Microsoft.EntityFrameworkCore
  • 级联删除是一种关系行为,而不是实体。因此OnDelete 仅在关系配置流式 API 上可用,如链接 btw 所示。并且无需寻求外部资源,EF Core 文档是第一个开始的地方。在你的情况下,Relationships - Cascade Delete

标签: c# entity-framework-core asp.net-core-2.0


【解决方案1】:

OnDelete 指定当主体被删除或关系被切断时,如何配置删除操作来删除关系中的依赖实体。

它在ReferenceCollectionBuilder|ReferenceReferenceBuilder 对象上可用。阅读here

解决方案

您应该将关系定义为

    entity
        .HasMany(a => a.Contacts)
        .WithOne(c => c.Address)
        .OnDelete(DeleteBehavior.Cascade);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 2018-02-01
    • 1970-01-01
    • 2011-12-01
    • 1970-01-01
    • 2011-02-15
    • 2020-02-06
    相关资源
    最近更新 更多