我有以下情况,我的设计看起来像这样,数据库中已经有一些数据。
if (this.refreshTokenInProgress) {
return this.refreshTokenSubject
.filter(result => result !== null)
.pipe(
take(1),
switchMap(() => {
return this.getTokenObservable().pipe(switchMap((user_tokens) => {
return next.handle(this.addToken(user_tokens, request));
}));
}),
tap(evt => {
this.loaderService.storeLoaderOff();
})
)
} else {
this.refreshTokenInProgress = true;
this.refreshTokenSubject.next(null);
return this.refreshAccessToken().pipe(
switchMap((token: any) => {
this.refreshTokenInProgress = false;
this.refreshTokenSubject.next(token.access_token);
return this.getTokenObservable().pipe(switchMap((user_tokens) => {
return next.handle(this.addToken(user_tokens, request)).pipe(tap(evt => {
// this.loaderService.storeLoaderOff();
}))
}));
}),
catchError((err: any) => {
this.loaderService.storeLoaderOff();
this.refreshTokenInProgress = false;
this.authService.logoutUser();
return throwError(error);
})
);
}
后来我意识到这是我的错误,设计实际上应该是:
public class MyContext : DbContext
{
public DbSet<MyEntity> MyEntities { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=database.db");
}
}
public class MyEntity
{
public int MyEntityId { get; set; }
public int MetaEntityId { get; set; }
public MetaEntity MetaEntity { get; set; }
}
public class MetaEntity
{
public int MetaEntityId { get; set; }
}
在不丢失实体之间关系的情况下应用此迁移的最佳方法是什么?迁移Up()方法内部有什么方法可以记住关系,更改数据库架构然后重新应用关系?
答案 0 :(得分:0)
好,所以我找到了解决方案(在SQLite中不起作用!,上面的代码只是一个示例,实际的生产数据库是MySQL)。
在新迁移中,在创建新列之后并在删除旧列之前将其移至正确位置:
migrationBuilder.Sql("UPDATE MetaEntity " +
"INNER JOIN MyEntity ON MetaEntity.MetaEntityId = MyEntity.MetaEntityId " +
"SET MetaEntity.MyEntityId = MyEntity.MyEntityId;");