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

Linq to sql 如何在运行时更改LINQ 2 SQL列的UpdateCheck属性?,linq-to-sql,updatecheck,Linq To Sql,Updatecheck,我们有几个应用程序使用相同的Linq 2 SQL数据上下文。其中一个应用程序将进行大量插入(这是一个旧系统的转换器)。是否可以在运行时更改每个表的TimeStamp列的UpdateCheck?只有这一个应用程序我们想将其设置为“从不”,所有其他应用程序都应该始终设置为“从不”。AFAIK您不能在运行时更改它(至少用简单的方法),因为它是作为域类属性中的属性自动生成的。例如 [Column(Name="ITM_CREATE_DATE", Storage="_ITM_CREATE_DATE", Db

我们有几个应用程序使用相同的Linq 2 SQL数据上下文。其中一个应用程序将进行大量插入(这是一个旧系统的转换器)。是否可以在运行时更改每个表的TimeStamp列的UpdateCheck?只有这一个应用程序我们想将其设置为“从不”,所有其他应用程序都应该始终设置为“从不”。

AFAIK您不能在运行时更改它(至少用简单的方法),因为它是作为域类属性中的属性自动生成的。例如

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

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

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

有关我尝试执行的操作的更多信息:

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

exec sp_executesql N'INSERT到[dbo].[Test]([ID],[Data]) 数值(@p0,@p1)

选择[t0]。[时间戳] 从[dbo].[Test]到[t0] 其中[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'


我想阻止选择部分,因为此应用程序只执行插入操作,我有一种感觉,当插入100000多条记录时,抑制选择[to].[timestamp]部分可能会给我带来很多性能…

插入后,[Column]属性的几个属性会触发选择:

  • 自动同步,默认情况下从不使用,由ISDBGenerated和ISDBVersion覆盖
  • ISDBGenerated,它生成您正在描述的行为
  • IsVersion,这意味着每次更新/插入记录时该字段都会自动更新,而LINQ也会在更新/插入后获取实际值,从而导致您描述的行为
我不确定这是否适用于您的特定情况,但是否可以从困扰您的字段中删除这些属性,并手动设置,而不是让DB自行设置?(或者至少,不要告诉LINQ数据库会自动设置,LINQ在插入后不会选择)

这并不能解决只为两个项目中的一个修复它的实际问题。我也不确定LINQ是在运行时通过反射完成的,还是在编译时完成的。如果魔法是在运行时完成的,您可能可以删除带有反射的属性并将其添加回,也许,我真的不知道

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

只有我的2美分。

Damien,让met重新表述这个问题,如何防止LINQ到SQL在插入后从DB读取时间戳值?我认为这种行为是由TimeStamp列上的UpdateCheck属性控制的。JensI不确定是否重新发布相同的问题-“如何在运行时更改Linq2SQL列的UpdateCheck属性?”。