首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改实体框架核心代码优先迁移名称格式

更改实体框架核心代码优先迁移名称格式
EN

Stack Overflow用户
提问于 2019-04-26 21:07:35
回答 3查看 833关注 0票数 3

ef核心使用系统日历格式生成迁移名称。

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

代码语言:javascript
复制
20190206144020_MIGRATION-NAME

但是,如果Windows的日期格式不是公历,如波斯历,则ef核心迁移名称会生成如下内容:

代码语言:javascript
复制
13971114210223_MIGRATION-NAME

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

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

版本: EF核心2.2

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-04-26 21:49:45

这只是MigrationsIdGenerator类获取最新的EF Core 2.2.4 -在最后一行GenerateId的方法:

代码语言:javascript
复制
return timestamp.ToString(Format) + "_" + name;

他们只是忘了通过CultureInfo.InvariantCulture至DateTime.Format方法。

这是已在当前代码中修复

(我相信适用于EF Core 3.0),所以您可以等待它,或者将当前代码复制/粘贴到您的项目中(将类重命名为FixedMigrationsIdGenerator),然后在您的and then inside your派生类,重写OnConfiguring并添加以下内容(包含必要的using s):

代码语言:javascript
复制
optionsBuilder.ReplaceService();
票数 5
EN

Stack Overflow用户

发布于 2019-11-05 15:51:03

我已经扩展了接受的答案,并创建了一个派生自MigrationsIdGenerator类仅重写GenerateId

方法:

代码语言:javascript
复制
public class FixedMigrationsIdGenerator : MigrationsIdGenerator
{
    private const string Format = "yyyyMMddHHmmss";

    private DateTime _lastTimestamp = DateTime.MinValue;
    private readonly object _lock = new object();

    public override string GenerateId(string name)
    {
        var now = DateTime.UtcNow;
        var timestamp = new DateTime(now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second);

        lock (_lock)
        {
            if (timestamp <= _lastTimestamp)
            {
                timestamp = _lastTimestamp.AddSeconds(1);
            }

            _lastTimestamp = timestamp;
        }

        return timestamp.ToString(Format, CultureInfo.InvariantCulture) + "_" + name;
    }
}
票数 2
EN

Stack Overflow用户

发布于 2021-02-20 02:07:37

我通常使用命令提示符文件或批处理文件(.cmd)自动创建名称(包括日期和时间)。为此,我只需双击.cmd文件,就会使用我自己的自动文件名执行迁移。下面是我的.cmd文件内容(例如,添加_迁移_Identity.cmd):

代码语言:javascript
复制
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

下面是我的更新.cmd文件(作为更新示例_数据库_Identity.cmd):

代码语言:javascript
复制
dotnet ef --startup-project MyProject database update -c IdentityContext
pause
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55868321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档