SubSonic 3.0简单存储库将DateTime属性添加到对象

时间:2009-09-08 12:56:45

标签: c# asp.net-mvc subsonic subsonic3

我正在尝试使用SubSonic来确定它是否适用于生产项目。我似乎偶然发现了一个问题,即在创建新列时使用默认值(String和DateTime)更新数据库。

如果将DateTime或String的新属性添加到对象。

public class Bug
{
    public int BugId { get; set; }
    public string Title { get; set; }
    public string Overview { get; set; }
    public DateTime TrackedDate { get; set; }
    public DateTime RemovedDate { get; set; }
}

当运行将该类型的对象添加到数据库的代码时

var repository = new SimpleRepository(SimpleRepositoryOptions.RunMigrations);           

repository.Add(new Bug()
{
    Title = "A Bug",
    Overview = "An Overview",
    TrackedDate = DateTime.Now
});

它创建了以下sql:

UPDATE Bugs SET RemovedDate=''01/01/1900 00:00:00''

由于某种原因,它在字符串或DateTime的每一端添加双2单引号。

这导致以下错误:

  

System.Data.SqlClient.SqlException - '01'附近的语法不正确

我正在连接到SQL Server 2005

除了这个问题之外,任何帮助都会被认定为我发现SubSonic是一款出色的产品。


我创建了错误here的屏幕广角:

3 个答案:

答案 0 :(得分:5)

这是一个错误,双引号引入了一些转速。我很确定这已经修复了> 3.0.0.3所以如果你想获取当前的下降,应该处理它。

很抱歉这个混乱 - 但是你已经发现你可以在创建时设置值,这将对问题进行排序。此外,您可以执行andymeadows建议的操作,这将使该字段可以为空(这可能更准确)。

无论如何 - 我们很快就会修好:)。我正在努力找工作,并没有太多的周期来合并分支:(

答案 1 :(得分:1)

尝试将RemovedDate的类型从DateTime更改为DateTime?

public class Bug
{
    public int BugId { get; set; }
    public string Title { get; set; }
    public string Overview { get; set; }
    public DateTime TrackedDate { get; set; }
    public DateTime? RemovedDate { get; set; }
}

答案 2 :(得分:1)

好的,这看起来肯定是一个bug,你不会说UPDATE语句中是否有WHERE子句但是如果不存在则更多。请将其作为问题报告给github,并复制测试用例。 在此期间,您可以通过在代码中设置RemovedDate的值来解决此问题,例如

repository.Add(new Bug()
{
  Title = "A Bug",
  Overview = "An Overview",
  TrackedDate = DateTime.Now
  RemovedDate = DateTime.Now // Set it as required here Now's just an example
});