0

我们有一些应用程序使用相同的 Linq 2 SQL DataContext。其中一个应用程序将进行大量插入(它是来自旧系统的转换器)。是否可以在运行时更改每个表的 TimeStamp 列的 UpdateCheck ?仅对于我们希望将其设置为“从不”的一个应用程序,所有其他应用程序都应具有“始终”。

4

4 回答 4

1

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

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

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

于 2008-11-05T15:57:45.703 回答
0

UpdateCheck is not used for Insert operations, only for update.

于 2008-11-05T17:59:38.903 回答
0

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

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

exec sp_executesql N'INSERT INTO [dbo].[Test]([ID], [Data]) VALUES (@p0, @p1)

SELECT [t0].[timestamp] FROM [dbo].[Test] 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] 部分可能会给我带来很多性能......

于 2008-11-06T07:47:50.823 回答
0

[Column] 属性有几个属性会在 INSERT 之后触发该 SELECT:

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

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

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

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

于 2009-03-26T14:13:15.913 回答