保存后TimeSpan滴答获得+1

Bas*_*lew 5 c# dapper

我有一个小巧的问题,我不知道如何解决这个问题:

我有一个这样的Poco:

public class Test
{
    public long Id { get; set; }
    public TimeSpan? Time { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

字段Time是MySQL'TIME'.例如,如果我用Dapper加载一个带有1000个刻度的时间字段的行,并且我保存此Poco而不做任何更改,再次重新加载同一行,时间字段现在为1001刻度.

我究竟做错了什么 ?

编辑:

我如何加载我的行:

var testobj = Db.Query<Test>("select * from Test where Id = @id", new {id = Id});
Run Code Online (Sandbox Code Playgroud)

我如何保存它:

Db.Execute("replace into Test values (@Id,@Time)", testObj);
Run Code Online (Sandbox Code Playgroud)

编辑2:

保存前的时间跨度对象:

{15:22:24}
    Days: 0
    Hours: 15
    Milliseconds: 0
    Minutes: 22
    Seconds: 24
    Ticks: 553440000000
    TotalDays: 0.64055555555555554
    TotalHours: 15.373333333333333
    TotalMilliseconds: 55344000.0
    TotalMinutes: 922.4
    TotalSeconds: 55344.0
Run Code Online (Sandbox Code Playgroud)

保存后:

{15:22:25}
    Days: 0
    Hours: 15
    Milliseconds: 0
    Minutes: 22
    Seconds: 25
    Ticks: 553450000000
    TotalDays: 0.64056712962962958
    TotalHours: 15.37361111111111
    TotalMilliseconds: 55345000.0
    TotalMinutes: 922.41666666666674
    TotalSeconds: 55345.0
Run Code Online (Sandbox Code Playgroud)

你可以看到Ticks 553440000000并成为553450000000

编辑3:

我在我的Test类中使用Hans提示,如下所示:

public class Test
{
    public long Id { get; set; }
    private TimeSpan? _time;

    public TimeSpan? Time
    {
        get
        {
            if (_time.HasValue)
                return TimeSpan.FromTicks((long)Math.Floor(_time.Value.Ticks / 100000000d) * 100000000);
            return _time;
        }
        set { _time = value; }
    }
}
Run Code Online (Sandbox Code Playgroud)

它有效,但它仍然很奇怪

Bas*_*lew 1

经过大量研究,我的公司开发了一个 mysql 插件,在某些情况下可以做一些特殊的事情。很抱歉在这个问题上浪费了时间。