Sql server Blazor应用程序中的删除操作级联(不需要),但在SQL Server Management Studio中,setDefault正在工作(需要)

Sql server Blazor应用程序中的删除操作级联(不需要),但在SQL Server Management Studio中,setDefault正在工作(需要),sql-server,entity-framework-core,crud,blazor-server-side,Sql Server,Entity Framework Core,Crud,Blazor Server Side,我有一个blazor服务器端应用程序,使用最新的EF Core 3.1访问SQL server Express数据库 我希望删除操作将依赖实体设置回默认值int(1) 通过注释设置从属实体,如下所示: 公共课 { [关键] [显示(Name=“Kurzus Azonosító”)] 公共int Id{get;set;} //其他属性 [显示(Name=“Típus”)] [默认值(1)] 公共整数VariantID{get;set;}// { options.UseSqlServer(Confi

我有一个blazor服务器端应用程序,使用最新的EF Core 3.1访问SQL server Express数据库

我希望删除操作将依赖实体设置回默认值
int(1)

通过注释设置从属实体,如下所示:

公共课
{
[关键]
[显示(Name=“Kurzus Azonosító”)]
公共int Id{get;set;}
//其他属性
[显示(Name=“Típus”)]
[默认值(1)]
公共整数VariantID{get;set;}//
{
options.UseSqlServer(Configuration.GetConnectionString(“DefaultConnection”),
SQLServerOptions操作:sqlOptions=>
{
sqlOptions.EnableRetryOnFailure();
})
.EnableDetailedErrors()
.EnableSensitiveDataLogging(Configuration.GetValue(“Logging:EnableSqlParameterLogging”))
.UseQueryTrackingBehavior(QueryTrackingBehavior.NotTracking);
});
//其他服务
services.AddTransient();
services.AddTransient();
添加迁移时,自动设置我的外键:

migrationBuilder.AddForeignKey(
名称:“FK_课程_变体_变体”,
表:“课程”,
列:“VariantID”,
原则:“变体”,
主栏:“Id”,
onDelete:引用。级联);
我可以将其编辑为:
onDelete:ReferentialAction.SetDefault

更新数据库后,我可以在SQL Server Management Studio中验证表设计:

CONSTRAINT [FK_Courses_Variants_VariantID] 
FOREIGN KEY ([VariantID]) REFERENCES [dbo].[Variants] ([Id]) ON DELETE SET DEFAULT
这里出现了一个奇怪的部分:如果我按以下顺序操作,setDefault将正常工作:

  • 将项目添加到主体表(示例:id=20)
  • 将新项添加到从属表中,并将VariantID设置为20
  • 从主体表中删除id=20的项
  • 检查依赖表,VariantID返回默认id=1
  • 但如果我在Blazor应用程序中执行相同的序列,#3步骤将级联删除

    主要实体的CRUD服务:

    公共接口IVariantService
    {
    任务Get();
    任务获取(int-id);
    任务添加(变量);
    任务更新(变量);
    任务删除(int-id);
    }
    公共类VariantService:IVariantService
    {
    私有只读应用程序的bContext\u上下文;
    公共变量服务(ApplicationDbContext上下文)
    {
    _上下文=上下文;
    }
    公共异步任务Get()
    {
    返回等待上下文变量
    .AsNoTracking()
    .ToListAsync();
    }
    公共异步任务Get(int-id)
    {
    var variant=wait_context.Variants.FindAsync(id);
    返回变量;
    }
    公共异步任务添加(变量)
    {
    _context.Variants.Add(variant);
    wait_context.SaveChangesAsync();
    返回变量;
    }
    公共异步任务更新(变量)
    {
    _context.Entry(variant.State=EntityState.Modified;
    wait_context.SaveChangesAsync();
    返回变量;
    }
    公共异步任务删除(int-id)
    {
    bool isDeleted=false;
    var variant=wait_context.Variants
    .FindAsync(id);
    if(变量!=null)
    {
    _删除(变体);
    wait_context.SaveChangesAsync();
    isDeleted=真;
    }
    返回被删除;
    }
    }
    
    这种行为的根本原因是什么

    我希望这是一个清晰的解释,谢谢你的反馈