我已经开始使用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个小时才能发布答案,所以我把它放在这里。
答案 0 :(得分:0)
“CreatedOn”是SS ActiveRecord中的约定 - 当一个字段被称为“CreatedOn”时,您看到设置日期的代码将由T4模板添加。它显然对你的情况没有帮助。
两个选项:
编辑您的T4模板以删除违规行(因此您将无法利用任何模型对象中的自动时间戳)
将字段名称更改为其他内容
答案 1 :(得分:0)
如果接受的答案不适合我,那么你可以做一个
new InlineQuery().Execute(string query)
更新上述字段。