2009-07-13 191 views
22

当使用Linq-to-SQL,将列添加到现有表中,并在该新列上设置默认值时,似乎Linq to SQL忽略默认值。 有没有其他人经历过这种行为?有没有办法解决这个问题,以便Linq-to-SQL或SQL Server自动设置默认值?Linq-to-SQL忽略SQL Server默认值

我添加的列是类型位的,设置为1

+1

重复:http://stackoverflow.com/q/201706/11683(不投票结束,两者同样有用)。 – GSerg 2016-11-06 19:14:06

回答

11

我现在通过使用this blog的一个例子明确地解决了这个问题。

partial void OnCreated() { 
    if (this.DateTimeCreated == null) { 
      this.DateTimeCreated = DateTime.Now; 
    } 
} 

我需要这个传递到部分DataContext类,作为默认的一个被自动覆盖每次在DBML改变一些东西。

4

我已经看到了这个默认值。你可以做的是进入l2sql设计器,查看具有默认值的表列的属性。有一个属性“自动生成的值”,将其设置为true。

自动为标识列自动设置此值为true,因为在这种情况下,SQL Server正在生成行ID。

+1

这不起作用,因为我需要以后更新列。当我尝试你的解决方案时,我得到一个错误:“在数据库中计算或生成的成员不能改变” – jao 2009-07-13 18:38:15

+0

这太糟糕了。我从来没有尝试过这个领域,我想稍后改变(我用它为DateCreated列)。即使在这种情况下,我决定不使用SQL默认值,并在我的代码中明确地设置它 - 推理是我的域逻辑的一部分,因此它属于我的域逻辑代码的其余部分。 – 2009-07-14 16:45:26

+0

我认为我得到的错误是Linq-to-sql中的一个错误。 “自动生成的值”工具提示显示“插入时自动生成值” – jao 2009-07-20 16:33:03

7

进入设计器并选择“自动同步”值的“OnInsert”。这将在记录插入数据库时​​同步该值。

+0

请参阅http://www.intrepidstudios.com/blog/2009/2/6/using-default-values-in-linq-to-sql。 aspx获取更多信息。这是最终的方法。 – GONeale 2011-08-24 01:23:04

11

将Auto Generated属性设置为True。

enter image description here

1

我面临布尔数据类型的使用缺省的相同的问题虚假和不更新该值 因此,当我看到数据库表中,我发现没有主键被设置,因此当我设置了更新后发现的主键。 所以检查一个表是否有主键。

1

如果您需要更改自己的代码中的值(例如,具有默认值的类型表值),那么请勿使用“自动生成的值”,否则当您尝试更新时会出现该值。

Value of member 'AlternativeQuoteStatus' of an object of type 'OrderDetail' changed. A member that is computed or generated by the database cannot be changed.

我喜欢当我创建的对象,在OnCreated回退为他人在这里描述的设定值。