Entity framework core 更改实体框架核心代码第一次迁移名称格式

Entity framework core 更改实体框架核心代码第一次迁移名称格式,entity-framework-core,entity-framework-migrations,Entity Framework Core,Entity Framework Migrations,ef core使用系统日历格式生成迁移名称 windows上公历的标准迁移名称示例: 20190206144020_MIGRATION-NAME 但如果Windows的日期格式不是公历,如波斯日历,ef core迁移名称会生成如下内容: 13971114210223_MIGRATION-NAME 在团队项目中,我们不能同时使用这两种格式,因为这会改变迁移的顺序 有没有办法在不更改windows日历格式或手动重命名迁移的情况下解决此问题 版本:EF core 2.2这只是EF core 2.2

ef core使用系统日历格式生成迁移名称

windows上公历的标准迁移名称示例:

20190206144020_MIGRATION-NAME
但如果Windows的日期格式不是公历,如波斯日历,ef core迁移名称会生成如下内容:

13971114210223_MIGRATION-NAME
在团队项目中,我们不能同时使用这两种格式,因为这会改变迁移的顺序

有没有办法在不更改windows日历格式或手动重命名迁移的情况下解决此问题


版本:EF core 2.2

这只是EF core 2.2.4最新版本的类中的一个bug-在of
GenerateId
方法中:

return timestamp.ToString(Format) + "_" + name;
他们只是忘记将
CultureInfo.InvariantCulture
传递给
DateTime.Format
方法

它是(我相信是EF Core 3.0),所以您要么等待它,要么将当前代码复制/粘贴到您的项目中(重命名该类,比如说
FixedMigrationsIdGenerator
),然后在
DbContext
派生类中,重写
OnConfiguring
,并添加以下内容(使用
s添加必要的
):

optionsBuilder.ReplaceService();

我扩展了已接受的答案,并创建了一个从
MigrationsIdGenerator
类派生的类,该类仅覆盖
GenerateId
方法:

return timestamp.ToString(Format) + "_" + name;
公共类FixedMigrationsIdGenerator:MigrationsIdGenerator
{
private const string Format=“yyyyMMddHHmmss”;
私有日期时间_lastTimestamp=DateTime.MinValue;
私有只读对象_lock=新对象();
公共重写字符串GenerateId(字符串名称)
{
var now=DateTime.UtcNow;
var timestamp=新的日期时间(now.Year,now.Month,now.Day,now.Hour,now.Minute,now.Second);
锁
{

如果(timestamp我通常使用命令提示符文件或批处理文件(.cmd)自动创建一个名称(包括日期和时间)。这样我只需双击.cmd文件,就可以使用我自己的自动文件名执行迁移。 以下是我的.cmd文件内容(例如add_migrations_Identity.cmd):

这里是我的update.cmd文件(例如update_db_Identity.cmd):


我没有找到解决方案,但这个问题似乎在下一个主要版本(3.0)中得到了解决。我认为您需要进行第二次迁移,并通过名为的文件夹传递新名称。
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c_%%a_%%b)
For /f "tokens=1-2 delims=/:" %%a in ("%TIME: =0%") do (set mytime=%%a%%b)
dotnet ef --startup-project MyProject migrations add Identity_V%mydate%_%mytime% -o Migrations/Identity -c IdentityContext
pause
dotnet ef --startup-project MyProject database update -c IdentityContext
pause