如何在运行时更改LINQ 2 SQL列的UpdateCheck属性?

时间:2008-11-05 15:39:29

标签: linq-to-sql updatecheck

我们有一些应用程序使用相同的Linq 2 SQL DataContext。其中一个应用程序将执行大量插入(它是旧系统的转换器)。是否可以在运行时更改每个表的TimeStamp列的UpdateCheck?只有这个应用程序我们想将它设置为Never,所有其他应用程序应该具有Always。

4 个答案:

答案 0 :(得分:1)

AFAIK你无法在运行时更改它(至少用简单的方法),因为它是在域类的属性中作为属性自动生成的。 E.g。

[Column(Name="ITM_CREATE_DATE", Storage="_ITM_CREATE_DATE", DbType="DateTime NOT NULL", UpdateCheck=UpdateCheck.Never)]
public System.DateTime CreationDate

一种可能的解决方法(我从未尝试过,所以我不知道它是否有效)是复制单个项目中的<DataContext>.designer.cs代码,在副本中进行更改并在没有设计者的情况下使用它

答案 1 :(得分:0)

UpdateCheck不用于插入操作,仅用于更新。

答案 2 :(得分:0)

有关我正在尝试做的更多信息:

我在SQL Server探查器中看到了这种行为:

exec sp_executesql N'INSERT INTO [dbo]。[测试]([ID],[数据]) 价值观(@ p0,@ p1)

SELECT [t0]。[timestamp] FROM [dbo]。[测试] AS [t0] WHERE [t0]。[ID] = @ p2',N'@ p0 uniqueidentifier,@ p1 varchar(24),@ p2 uniqueidentifier',@ p0 ='EF0F12B9-825E-48A2-943A-B43E94BB00AA',@ p1 =' tadaaa 20081106 08:41:01',@ p2 ='EF0F12B9-825E-48A2-943A-B43E94BB00AA'

我想阻止SELECT部分​​,因为这个应用程序只执行INSERTS,我有一种感觉,当插入100 000多条记录时,抑制SELECT [to]。[timestamp]部分可能会获得很多性能。 ..

答案 3 :(得分:0)

[Column]属性的几个属性在INSERT后激活了SELECT:

  • AutoSync,默认为Never,由ISDBGenerated和ISDBVersion覆盖
  • ISDBGenerated,它会生成您正在描述的行为。
  • IsVersion,这意味着每次更新/插入记录时该字段都会自动更新,LINQ也会在更新/插入后获取实际值,从而导致您描述的行为。

我不确定这是否适用于您的特定情况,但是是否可以从困扰您的字段中删除这些属性并手动设置,而不是让DB自己设置它? (或者至少,不要告诉LINQ DB会自动设置它,LINQ在INSERT后不会选择。)

这并不能解决仅针对2个项目中的一个修复它的实际问题。我也不确定LINQ的东西是在运行时通过反射还是在编译时完成的。如果魔法在运行时完成,你可以能够用反射删除属性并将其添加回来,也许,我真的不知道。

免责声明:我所说的一切都是理论上的,我没有测试过所有这些东西,也没有足够的LINQ经验。
我的2美分。