调用.Save()后的亚音速日期更改

时间:2011-10-09 13:34:17

标签: c# date subsonic

我已经开始使用Subsonic开发小型CMS Web应用程序。 我注意到,当我调用Subsonic-Table-Object的.Save()方法时,我的日期字段“CreatedOn”被今天的日期覆盖。

Subsonic Info:使用ActiveRecord的3.0.0.4版

    // add article from dataset
    Article a = new Article(); 
    a.Title = article["title"].ToString();
    a.Synopsis = article["teaser"].ToString();
    a.Body = article["body"].ToString();
    a.Keywords = string.Empty;
    a.Photo = string.Empty;
    ///articles/2010/04/14/deregistration-of-trade-unions
    a.CreatedOn = DateTime.Parse(sDestin.Substring(9, 10)); 
    a.UpdatedOn = DateTime.Parse(sDestin.Substring(9, 10));
    a.Save();

在保存之前,CreatedOn字段设置为正确的日期(与UpdatedOn相同)。 运行.Save()方法后,CreatedOn字段将更改为今天的日期。 UpdatedOn日期字段保持分配给它的相同日期。

我尝试过: 我已经仔细检查了Article表,没有任何默认值,如(GetDate())存在于任何日期字段。 我已经多次重建我的模板了。 我还尝试重新设置并再次保存CreatedOn日期字段。

任何帮助都将不胜感激。


回答

经过进一步调查后,我发现了问题。 Subsonic似乎正在生成一行操纵日期的代码。 我不知道为什么它只在CreatedOn日期而不是在UpdatedOn日期这样做。两个字段的结构相同(MSSQL 2005)。

从我的文章对象的Save()方法中提取。

        public void Add(IDataProvider provider){

        //this.CreatedOn=CMSDB.DateTimeNowTruncatedDownToSecond(); // commenting this out works, CreatedOn is no longer overwritten

        var key=KeyValue();
        if(key==null){
            var newKey=_repo.Add(this,provider);
            this.SetKeyValue(newKey);
        }else{
            _repo.Add(this,provider);
        }
        SetIsNew(false);
        OnSaved();
    }

以下是亚音速创建的异常上下文方法:

        internal static DateTime DateTimeNowTruncatedDownToSecond() {
        var now = DateTime.Now;
        return now.AddTicks(-now.Ticks % TimeSpan.TicksPerSecond);
    }

注意:Stackoverflow要求我等待6个小时才能发布答案,所以我把它放在这里。

2 个答案:

答案 0 :(得分:0)

“CreatedOn”是SS ActiveRecord中的约定 - 当一个字段被称为“CreatedOn”时,您看到设置日期的代码将由T4模板添加。它显然对你的情况没有帮助。

两个选项:

  • 编辑您的T4模板以删除违规行(因此您将无法利用任何模型对象中的自动时间戳)

  • 将字段名称更改为其他内容

答案 1 :(得分:0)

如果接受的答案不适合我,那么你可以做一个

new InlineQuery().Execute(string query)

更新上述字段。