我们有一些应用程序使用相同的Linq2SQLDataContext。其中一个应用程序将进行大量插入(它是旧系统的转换器)。是否可以在运行时更改每个表的TimeStamp列的UpdateCheck?只有一个应用程序我们想将其设置为"从不",所有其他应用程序都应该具有"始终"。
AFAIK您不能在运行时更改它(至少用简单的方法),因为它是作为域类属性中的属性自动生成的。例如
[Column(Name="ITM_CREATE_DATE", Storage="_ITM_CREATE_DATE", DbType="DateTime NOT NULL", UpdateCheck=UpdateCheck.Never)]
public System.DateTime CreationDate
一个可能的解决方法(我从未尝试过,所以我不知道它是否有效)是在您的单个项目中复制<DataContext>.designer.cs
代码,在副本中进行更改,然后在没有设计器的情况下使用它。
UpdateCheck不用于Insert操作,仅用于更新。
关于我尝试做什么的更多信息:
我在SQL Server探查器中看到了这种行为:
exec sp_executesql N'INSERT INTO[dbo]。[测试]([ID],[数据])值(@p0,@p1)
选择[t0]。[时间戳]自[dbo]。[测试]AS[t0]其中[t0]。[ID]=@p2',N'@p0唯一标识符,@p1 varchar(24),@p2唯一标识符',@p0='EF0F12B9-825E-48A2-943A-B43E94BB00AA',@p1='adaaa 20081106 08:41:01',@p2='EF0F102B9-825E-48A2-9 43A-B43E4BB00AA'
我想阻止SELECT部分,因为这个应用程序只执行INSERTS,我有一种感觉,当插入100000多条记录时,会抑制SELECT[to]。[时间戳]部分可能会让我获得很多性能。。。
[Column]属性的几个属性在INSERT:之后触发SELECT
- AutoSync,默认情况下为Never,由ISDBGgenerated和ISDBVersion覆盖
- ISDBGgenerated,它生成您所描述的行为
- IsVersion,这意味着每次更新/插入记录时,该字段都会自动更新,LINQ也会在更新/插入后获取实际值,从而产生您所描述的行为
我不确定这是否适用于您的特定情况,但是否可以从困扰您的字段中删除这些属性,并手动设置,而不是让DB自己设置?(或者至少,不要告诉LINQ DB会自动设置它,LINQ在INSERT之后不会SELECT)。
这并不能解决仅为两个项目中的一个项目修复它的实际问题。我也不确定LINQ的东西是在运行时通过反射完成的,还是在编译时完成的。如果魔法是在运行时完成的,那么可能能够移除带有反射的属性并将其添加回来,也许,我真的不知道。
免责声明:我所说的都是理论性的,我还没有测试过所有这些东西,也没有足够的LINQ经验
只有我的2美分。