我们有一些应用程序使用相同的Linq 2 SQL DataContext。其中一个应用程序将执行大量插入(它是旧系统的转换器)。是否可以在运行时更改每个表的TimeStamp列的UpdateCheck?只有这个应用程序我们想将它设置为Never,所有其他应用程序应该具有Always。
答案 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:
我不确定这是否适用于您的特定情况,但是是否可以从困扰您的字段中删除这些属性并手动设置,而不是让DB自己设置它? (或者至少,不要告诉LINQ DB会自动设置它,LINQ在INSERT后不会选择。)
这并不能解决仅针对2个项目中的一个修复它的实际问题。我也不确定LINQ的东西是在运行时通过反射还是在编译时完成的。如果魔法在运行时完成,你可以能够用反射删除属性并将其添加回来,也许,我真的不知道。
免责声明:我所说的一切都是理论上的,我没有测试过所有这些东西,也没有足够的LINQ经验。
我的2美分。