EFCore 数据迁移在添加第二个迁移时抛出错误
EFCore data migrations throws me an error when add the second migration
当我使用 efcore 在我的 asp.net 核心 3.1 应用程序上创建迁移时,它工作正常。
dotnet-ef migrations add Dev001 --project ..\Infrastructure\LetzIt.SqlServerDbService\LetzIt.SqlServerDbService.csproj --startup-project .\LetzIt.WebApi\LetzIt.WebApi.csproj
如果我只是添加一个新域 class(实体)并在我的模型配置构建器上进行配置,运行 命令:
dotnet-ef migrations add Dev002 --project ..\Infrastructure\LetzIt.SqlServerDbService\LetzIt.SqlServerDbService.csproj --startup-project .\LetzIt.WebApi\LetzIt.WebApi.csproj
输出给我这个错误:
ps:图片不好意思,这里的错误太丑了,看不懂。
主要线路是:
System.ArgumentException: At least one object must implement IComparable.
和
Failed to compare two elements in the array.
我对此进行了很多搜索,但没有找到任何内容。我自己没有使用任何 SORT。我的代码中不再有 OrderBy。
实体配置示例如下:
internal sealed class RoleConfiguration : IEntityTypeConfiguration<Role>
{
public void Configure(EntityTypeBuilder<Role> builder)
{
builder.ToTable("Role");
BuildIndexes(builder);
BuildProperties(builder);
//TableSeed(builder);
}
private void BuildIndexes(EntityTypeBuilder<Role> builder)
{
builder.HasKey(m => m.Id);
builder.HasIndex(m => m.Name).IsUnique();
}
private void BuildProperties(EntityTypeBuilder<Role> builder)
{
builder.Property(m => m.Id)
.HasConversion(p => p.ToGuid(), p => new RoleId(p))
.IsRequired();
builder.Property(p => p.Name)
.HasConversion(p => p.ToString(), p => new RoleName(p))
.HasMaxLength(60);
}
private void TableSeed(EntityTypeBuilder<Role> builder)
{
builder.HasData(
new Role(RoleIdConstants.Admin, RoleNameConstants.Admin),
new Role(RoleIdConstants.Manager, RoleNameConstants.Manager));
}
}
我的每个 属性 实体都是 ValueObject,这就是我使用 HasConversion 的原因。
同样,第一次迁移工作正常。如果我现在删除我的迁移(在创建新实体之后)并再次创建 Dev001 迁移,它就可以了!!
如果我尝试连续进行 2 次迁移,那是行不通的。
在此先感谢大家。
更多技术细节
- EF 核心版本:3.1.5
- 数据库提供者:Sql服务器
- 目标框架:ASP.NET Core 3.1
- 操作系统:Windows10
- IDE: Visual Studio 2019 16.3
这是 EFCore 稳定版(什么??)上的错误。
link显示答案:
当我使用 efcore 在我的 asp.net 核心 3.1 应用程序上创建迁移时,它工作正常。
dotnet-ef migrations add Dev001 --project ..\Infrastructure\LetzIt.SqlServerDbService\LetzIt.SqlServerDbService.csproj --startup-project .\LetzIt.WebApi\LetzIt.WebApi.csproj
如果我只是添加一个新域 class(实体)并在我的模型配置构建器上进行配置,运行 命令:
dotnet-ef migrations add Dev002 --project ..\Infrastructure\LetzIt.SqlServerDbService\LetzIt.SqlServerDbService.csproj --startup-project .\LetzIt.WebApi\LetzIt.WebApi.csproj
输出给我这个错误:
ps:图片不好意思,这里的错误太丑了,看不懂。 主要线路是:
System.ArgumentException: At least one object must implement IComparable.
和
Failed to compare two elements in the array.
我对此进行了很多搜索,但没有找到任何内容。我自己没有使用任何 SORT。我的代码中不再有 OrderBy。
实体配置示例如下:
internal sealed class RoleConfiguration : IEntityTypeConfiguration<Role>
{
public void Configure(EntityTypeBuilder<Role> builder)
{
builder.ToTable("Role");
BuildIndexes(builder);
BuildProperties(builder);
//TableSeed(builder);
}
private void BuildIndexes(EntityTypeBuilder<Role> builder)
{
builder.HasKey(m => m.Id);
builder.HasIndex(m => m.Name).IsUnique();
}
private void BuildProperties(EntityTypeBuilder<Role> builder)
{
builder.Property(m => m.Id)
.HasConversion(p => p.ToGuid(), p => new RoleId(p))
.IsRequired();
builder.Property(p => p.Name)
.HasConversion(p => p.ToString(), p => new RoleName(p))
.HasMaxLength(60);
}
private void TableSeed(EntityTypeBuilder<Role> builder)
{
builder.HasData(
new Role(RoleIdConstants.Admin, RoleNameConstants.Admin),
new Role(RoleIdConstants.Manager, RoleNameConstants.Manager));
}
}
我的每个 属性 实体都是 ValueObject,这就是我使用 HasConversion 的原因。
同样,第一次迁移工作正常。如果我现在删除我的迁移(在创建新实体之后)并再次创建 Dev001 迁移,它就可以了!!
如果我尝试连续进行 2 次迁移,那是行不通的。
在此先感谢大家。
更多技术细节
- EF 核心版本:3.1.5
- 数据库提供者:Sql服务器
- 目标框架:ASP.NET Core 3.1
- 操作系统:Windows10
- IDE: Visual Studio 2019 16.3
这是 EFCore 稳定版(什么??)上的错误。
link显示答案: