【发布时间】:2009-09-08 12:56:44
【问题描述】:
我正在试用 SubSonic,看看它是否可以用于生产项目。我似乎偶然发现了一个关于在创建新列时使用默认值(字符串和日期时间)更新数据库的问题。
如果将 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 的屏幕截图:
【问题讨论】:
-
这是否会导致错误,或者您想知道为什么将 RemovedDate 设置为该值?如果它导致错误,您使用的是哪个数据库,错误是什么?
-
感谢 Adam 的回复,这导致我在问题中添加了一个错误。
-
@Blounty:您不需要在代码 blocks 中使用反引号。四个空格前缀就够了。我为你删除了那些。
-
您能否发布 repo.Add 生成的完整 SQL。我很困惑为什么当它应该执行 INSERT 时会导致 UPDATE
-
它会导致更新,因为它是一个 NOT NULL 列,因此必须使用默认数据填充任何前面的行。
标签: c# asp.net-mvc subsonic subsonic3