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