0

同じLinq2SQLDataContextを使用するアプリケーションがいくつかあります。それらのアプリの1つは大規模な挿入を行います(これは古いシステムからのコンバーターです)。実行時に各テーブルのTimeStamp列のUpdateCheckを変更することは可能ですか?この1つのアプリについてのみ、[なし]に設定します。他のすべてのアプリには、[常に]が必要です。

4

4 に答える 4

1

ドメインクラスのプロパティの属性として自動生成されるため、実行時に(少なくとも簡単な手段で)変更することはできません。例えば

[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は、挿入操作には使用されず、更新にのみ使用されます。

于 2008-11-05T17:59:38.903 に答える
0

[Column]属性には、INSERTの後にそのSELECTを起動するいくつかのプロパティがあります。

  • AutoSync。これはデフォルトではNeverであり、ISDBGeneratedおよびISDBVersionによってオーバーライドされます。
  • ISDBGeneratedは、説明している動作を生成します。
  • IsVersionは、レコードを更新/挿入するたびにフィールドが自動更新されることを意味します。LINQは、更新/挿入後に実際の値もフェッチするため、説明した動作になります。

これが特定の状況に当てはまるかどうかはわかりませんが、DBに設定させるのではなく、問題のあるフィールドからこれらの属性を削除して手動で設定することは可能ですか?(または、少なくとも、DBが自動的に設定するようにLINQに指示しないでください。また、INSERT後にLINQはSELECTを実行しません)。

これは、2つのプロジェクトのうちの1つだけを修正するという実際の問題を解決するものではありません。また、LINQの処理が実行時にリフレクションによって実行されるのか、コンパイル時に実行されるのかもわかりません。魔法が実行時に行われる場合、リフレクションを使用して属性を削除し、それを追加し直すことができる場合があります。おそらく、私にはよくわかりません。

免責事項:私が言ったことはすべて理論的なものであり、これらすべてをテストしたわけではなく、LINQの経験も十分ではありません。
ちょうど私の2セント。

于 2009-03-26T14:13:15.913 に答える
0

私がやろうとしていることについての詳細情報:

SQL Server プロファイラーで次の動作が見られます。

exec sp_executesql N'INSERT INTO [dbo].[テスト]([ID], [データ]) 値 (@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'

このアプリケーションは INSERTS のみを行うため、SELECT 部分を防止したいと思います。100,000 件以上のレコードを挿入するときに、SELECT [to].[timestamp] 部分を抑制するとパフォーマンスが大幅に向上するのではないかと感じています ...

于 2008-11-06T07:47:50.823 に答える