[英]EF Core - Table '*.__EFMigrationsHistory' doesn't exist
[英]EF Core trying to drop index that doesn't exist
運行遷移嘗試將列從可為 null 修改為 not-null 時遇到錯誤。 我的 model class 看起來像這樣:
public class SaleLandNonDeeded
{
public Guid SaleLandNonDeededId { get; set; }
public Guid SaleId { get; set; }
public decimal? TotalValue { get; set; }
public virtual Sale Sale { get; set; }
}
以前, SaleId
是Guid?
. 這是 DbContext 中的DbContext
配置:
modelBuilder.Entity<SaleLandNonDeeded>(entity =>
{
entity.Property(e => e.SaleLandNonDeededId).HasDefaultValueSql("(newid())");
entity.Property(e => e.TotalValue).HasColumnType("money");
entity.HasOne(d => d.Sale)
.WithMany(p => p.SaleLandNonDeeded)
.HasForeignKey(d => d.SaleId)
.HasConstraintName("FK_SaleLandNonDeeded_SaleId");
});
更改類型后,創建了一個新的遷移:
// This line was added manually to delete null values before changing
// the column type.
migrationBuilder.Sql("DELETE FROM SaleLandNonDeeded WHERE SaleId IS NULL");
migrationBuilder.AlterColumn<Guid>(
name: "SaleId",
table: "SaleLandNonDeeded",
type: "uniqueidentifier",
nullable: false,
defaultValue: new Guid("00000000-0000-0000-0000-000000000000"),
oldClrType: typeof(Guid),
oldType: "uniqueidentifier",
oldNullable: true);
這失敗並出現以下情況:
Microsoft.EntityFrameworkCore.Database.Command:錯誤:執行 DbCommand 失敗(34 毫秒)[Parameters=[],CommandType='Text',CommandTimeout='30'] DROP INDEX [IX_SaleLandNonDeeded_SaleId] ON [SaleLandNonDeeded]; 聲明@var1 系統名; SELECT @var1 = [d].[name] FROM [sys].[default_constraints] [d] INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id] WHERE ([d].[parent_object_id] = OBJECT_ID(N'[SaleLandNonDeeded]') AND [c].[name] = N'SaleId'); IF @var1 IS NOT NULL EXEC(N'ALTER TABLE [SaleLandNonDeeded] DROP CONSTRAINT [' + @var1 + '];'); ALTER TABLE [SaleLandNonDeeded] ALTER COLUMN [SaleId] uniqueidentifier NOT NULL; 更改表 [SaleLandNonDeeded] 添加默認值 '00000000-0000-0000-0000-000000000000' FOR [SaleId]; 在 [SaleLandNonDeeded] ([SaleId]) 上創建索引 [IX_SaleLandNonDeeded_SaleId]; 拋出的異常:System.Private.CoreLib.dll 中的“Microsoft.Data.SqlClient.SqlException” SqlException' in System.Private.CoreLib.dll System.Private.CoreLib.dll 中出現類型為'Microsoft.Data.SqlClient.SqlException' 的異常,但未在用戶代碼中處理 無法刪除索引'SaleLandNonDeeded.IX_SaleLandNonDeeded_SaleId',因為它不存在或您沒有權限。
model、上下文、遷移或快照中的任何位置都沒有IX_SaleLandNonDeeded_SaleId
。 對整個解決方案執行 Ctrl+F 后,除上述日志條目外,不會返回任何匹配項。 我不知道為什么 EF Core 試圖刪除並創建這個索引。 我確實在這里發現了一個與此相關的問題: https://github.com/do.net/efcore/issues/7535回到 EF Core 1.0 並已修復關閉。 我正在使用 EF Core 5.0。
絕對不是最干凈的答案,但我和你有同樣的問題,我只是將丟失的索引添加為遷移的第一行:
migrationBuilder.CreateIndex("IX_SaleLandNonDeeded_SaleId", "SaleLandNonDeeded", "SaleId");
不要忘記更新Down()
方法:
migrationBuilder.DropIndex("IX_SaleLandNonDeeded_SaleId", "SaleLandNonDeeded");
我已經從 EF 6 升級到 EF core 5.0。 不要問我為什么他們決定改變命名約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.