C# Identity 3.0-如何在分层应用程序中将AspNetUsers ID用作外键

C# Identity 3.0-如何在分层应用程序中将AspNetUsers ID用作外键,c#,asp.net-core,asp.net-identity,C#,Asp.net Core,Asp.net Identity,意图: 一个订阅数据库表,其中包含一个UserId列,该列与AspNetUsers表的Id列具有外键关系 按参考层次结构的顺序设置项目: Web层包含ApplicationDbContext和ApplicationUser类 DTO层 数据访问层包含EFDbContext 项目是代码优先配置 数据库设置: ApplicationDbContext和EFDbContext都引用同一个数据库 ApplicationDbContext:引用所有标识实体 EFDbContext:引用我的订阅实体和其他实

意图:

一个订阅数据库表,其中包含一个UserId列,该列与AspNetUsers表的Id列具有外键关系

按参考层次结构的顺序设置项目:

Web层包含ApplicationDbContext和ApplicationUser类 DTO层 数据访问层包含EFDbContext 项目是代码优先配置

数据库设置:

ApplicationDbContext和EFDbContext都引用同一个数据库

ApplicationDbContext:引用所有标识实体 EFDbContext:引用我的订阅实体和其他实体 问题:

鉴于我的EFDbContext位于我的数据层中,其中不包含对Identity 3.0的任何引用,是否可以在AspNetUsers和订阅之间创建外键约束

是否可以在AspNetUsers和订阅之间创建外键约束

当然是。当你像那样跨越边界时,这是一件很常见的事情

而不是让EF创建您需要的关系

创建新的空迁移 添加代码以定义up方法的外键 添加代码以在down方法中撤消外键 在数据库上运行迁移 迁移将类似于:

    protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AddForeignKey(
            name: "FK_Table_PrincipalTable_TableId",
            table: "Table",
            column: "PrincipalTableId",
            principalTable: "PrincipalTable",
            principalColumn: "Id",
            onDelete: ReferentialAction.Cascade)
    }

    protected override void Down(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.DropForeignKey(
            name: "FK_Table_PrincipalTable_TableId",
            table: "Table");
    }

太好了,我从来没有想过直接在迁移中添加FK。一直依赖EF。这很有魅力,我给这个问题添加了我的答案。谢谢