.net core 在ApplicationDBContext中作为外来的.Net核心标识用户引用

.net core 在ApplicationDBContext中作为外来的.Net核心标识用户引用,.net-core,entity-framework-core,identity,asp.net-core-identity,.net Core,Entity Framework Core,Identity,Asp.net Core Identity,我使用的是Identity DB上下文和Application DB上下文,我有一个表(UserVehicles),其中我使用ApplicationUser(Identity User)属性进行了外键引用,当我为ApplicationDBContext添加迁移时,它正在为新表“ApplicationUser”创建脚本以及将外键关系添加到新表,而不是默认的AspnetUsers(Identity User)表。下面是课程 IdentityDBContext类 下面是创建的迁移 protected

我使用的是Identity DB上下文和Application DB上下文,我有一个表(UserVehicles),其中我使用ApplicationUser(Identity User)属性进行了外键引用,当我为ApplicationDBContext添加迁移时,它正在为新表“ApplicationUser”创建脚本以及将外键关系添加到新表,而不是默认的AspnetUsers(Identity User)表。下面是课程

IdentityDBContext类

下面是创建的迁移

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "ApplicationUser",
            columns: table => new
            {
                AccessFailedCount = table.Column<int>(nullable: false),
                EmailConfirmed = table.Column<bool>(nullable: false),
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                LockoutEnabled = table.Column<bool>(nullable: false),
                LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
                PhoneNumberConfirmed = table.Column<bool>(nullable: false),
                TwoFactorEnabled = table.Column<bool>(nullable: false),
                UserName = table.Column<string>(nullable: true),
                NormalizedUserName = table.Column<string>(nullable: true),
                Email = table.Column<string>(nullable: true),
                NormalizedEmail = table.Column<string>(nullable: true),
                PasswordHash = table.Column<string>(nullable: true),
                SecurityStamp = table.Column<string>(nullable: true),
                ConcurrencyStamp = table.Column<string>(nullable: true),
                PhoneNumber = table.Column<string>(nullable: true),
                FirstName = table.Column<string>(nullable: true),
                LastName = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_ApplicationUser", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "UserVehicles",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                Name = table.Column<string>(maxLength: 50, nullable: false),
                TrackerUniqueId = table.Column<string>(nullable: false),
                ServerHost = table.Column<string>(nullable: false),
                IsActive = table.Column<bool>(nullable: false),
                UserId = table.Column<int>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_UserVehicles", x => x.Id);
                table.ForeignKey(
                    name: "FK_UserVehicles_ApplicationUser_UserId",
                    column: x => x.UserId,
                    principalTable: "ApplicationUser",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });
    }
protected override void Up(MigrationBuilder MigrationBuilder)
{
migrationBuilder.CreateTable(
名称:“应用程序用户”,
列:表=>new
{
AccessFailedCount=table.Column(可空:false),
emailconfirm=table.Column(可空:false),
Id=table.Column(可空:false)
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn),
LockoutEnabled=table.Column(可空:false),
LockoutEnd=table.Column(可空:true),
PhoneNumberConfiged=table.Column(可空:false),
TwoFactorEnabled=table.Column(可空:false),
用户名=table.Column(可空:true),
NormalizedUserName=table.Column(可空:true),
Email=table.Column(可空:true),
NormalizedEmail=table.Column(可空:true),
PasswordHash=table.Column(可空:true),
SecurityStamp=table.Column(可空:true),
ConcurrencyStamp=table.Column(可空:true),
PhoneNumber=table.Column(可空:true),
FirstName=table.Column(可空:true),
LastName=table.Column(可空:true)
},
约束:表=>
{
表.PrimaryKey(“PK_ApplicationUser”,x=>x.Id);
});
migrationBuilder.CreateTable(
名称:“用户车辆”,
列:表=>new
{
Id=table.Column(可空:false)
.Annotation(“SqlServer:ValueGenerationStrategy”,SqlServerValueGenerationStrategy.IdentityColumn),
Name=table.Column(maxLength:50,null:false),
trackerniqueid=table.Column(可空:false),
ServerHost=table.Column(可空:false),
IsActive=table.Column(可空:false),
UserId=table.Column(可空:false)
},
约束:表=>
{
表.PrimaryKey(“PK_UserVehicles”,x=>x.Id);
表1.外键(
名称:“FK_UserVehicles_ApplicationUser_UserId”,
列:x=>x.UserId,
原则性:“应用程序用户”,
主栏:“Id”,
onDelete:引用。级联);
});
}

我试图删除迁移类中ApplicationUser的代码,同时将表名更新为Identity Users表名并更新数据库,然后当我查询UserVehicles表时,我得到了“ApplicationUser表不存在”

我曾经遇到过同样的问题,但另一侧也有导航属性。我使用的解析属性是
InverseProperty
属性

也许这会奏效

public class ApplicationUser : IdentityUser<int>
{
    /// Your others props...

    public virtual ICollection<UserVehicle> Vehicles { get; set; }
}

[Table("UserVehicles")]
public class UserVehicle
{
    /// Your others props...

    [InverseProperty("Vehicles")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}
公共类应用程序用户:IdentityUser
{
///你的其他道具。。。
公共虚拟ICollection车辆{get;set;}
}
[表(“用户车辆”)]
公共类用户车辆
{
///你的其他道具。。。
[反向财产(“车辆”)]
公共虚拟应用程序用户应用程序用户{get;set;}
}

我尝试了ForiegnKey表中的Inverse属性和ApplicationUser表中的ICollection属性,但仍然为ApplicationUser表的创建创建了迁移@您确定迁移是在同一个数据库上执行的吗?可能它采用了一些默认的连接字符串,而不是您期望的连接字符串。@RuardvanElburg是的,我使用的是相同的连接字符串,下面是来自ConfigureServices.AddDbContext的(options=>options.UseSqlServer(_-configuration.GetConnectionString(“DefaultConnection”));services.AddDbContext(options=>options.UseSqlServer(_-configuration.GetConnectionString(“DefaultConnection”))@RuardvanElburg你能帮我吗?这就是为什么你最好不要混合上下文。请阅读我的回答以获得解释:你可以尝试不将UserVehicle添加到身份上下文中。
protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.CreateTable(
            name: "ApplicationUser",
            columns: table => new
            {
                AccessFailedCount = table.Column<int>(nullable: false),
                EmailConfirmed = table.Column<bool>(nullable: false),
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                LockoutEnabled = table.Column<bool>(nullable: false),
                LockoutEnd = table.Column<DateTimeOffset>(nullable: true),
                PhoneNumberConfirmed = table.Column<bool>(nullable: false),
                TwoFactorEnabled = table.Column<bool>(nullable: false),
                UserName = table.Column<string>(nullable: true),
                NormalizedUserName = table.Column<string>(nullable: true),
                Email = table.Column<string>(nullable: true),
                NormalizedEmail = table.Column<string>(nullable: true),
                PasswordHash = table.Column<string>(nullable: true),
                SecurityStamp = table.Column<string>(nullable: true),
                ConcurrencyStamp = table.Column<string>(nullable: true),
                PhoneNumber = table.Column<string>(nullable: true),
                FirstName = table.Column<string>(nullable: true),
                LastName = table.Column<string>(nullable: true)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_ApplicationUser", x => x.Id);
            });

        migrationBuilder.CreateTable(
            name: "UserVehicles",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn),
                Name = table.Column<string>(maxLength: 50, nullable: false),
                TrackerUniqueId = table.Column<string>(nullable: false),
                ServerHost = table.Column<string>(nullable: false),
                IsActive = table.Column<bool>(nullable: false),
                UserId = table.Column<int>(nullable: false)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_UserVehicles", x => x.Id);
                table.ForeignKey(
                    name: "FK_UserVehicles_ApplicationUser_UserId",
                    column: x => x.UserId,
                    principalTable: "ApplicationUser",
                    principalColumn: "Id",
                    onDelete: ReferentialAction.Cascade);
            });
    }
public class ApplicationUser : IdentityUser<int>
{
    /// Your others props...

    public virtual ICollection<UserVehicle> Vehicles { get; set; }
}

[Table("UserVehicles")]
public class UserVehicle
{
    /// Your others props...

    [InverseProperty("Vehicles")]
    public virtual ApplicationUser ApplicationUser { get; set; }
}