5

私のデータベーステーブルはこのようなものです

CREATE TABLE MYBUDGET.tbl_CurrentProperty
(
    [PropID]            INT             NOT NULL  IDENTITY(1,1),
    [UpdatedOn]         DATETIME        NOT NULL,
    [Amount]            MONEY           NOT NULL,
    [Remarks]           VARCHAR(100)    NOT NULL,
)
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT PK_CurrentProperty_PropID PRIMARY KEY ([PropID])
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT DF_CurrentProperty_UpdatedOn DEFAULT (DATEADD(MINUTE,30,DATEADD(HOUR, 5, GETUTCDATE()))) FOR [UpdatedOn]
ALTER TABLE MYBUDGET.tbl_CurrentProperty ADD CONSTRAINT CK_CurrentProperty_Amount CHECK([Amount] > -1)
GO

LINQ to SQL を使用しています。C# では、[Amount] フィールドと [Remarks] フィールドのみを渡す必要があり、他のフィールドはデフォルト値 ([PropID] と [UpdatedOn]) で使用する必要があります。

C# では、以下のように tbl_CurrentProperties オブジェクトを作成します。

tbl_CurrentProperties currentProperties = new tbl_CurrentProperties();
currentProperties.Amount = 50.00M;
currentProperties.Remarks = "remarks";

次に、オブジェクトをデータ コンテキストに送信します。ただし、ここでは、Linq'1/1/0001 12:00:00 AM'が UpdatedOn フィールドに割り当てられています。しかし、これは SQL の日時範囲に違反し1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM、例外が発生します。DateTimeまた、フィールドは null 許容型ではないため、手動でフィールドに NULL 値を割り当てることはできません。とにかく、DEFAULT Constraint を使用するにはこれを作成する必要があります。どうすればいいですか?


PS: このように使用したいのは、データベースがオンラインで、ユーザーが別の場所にいるためです。したがって、DateTime.Now を使用すると、ユーザー マシンの時刻が間違っている可能性があり、間違った値が DB に挿入されます。常に SQL サーバー時間を使用する必要があります。

4

3 に答える 3

7

アンドレイの 答えは部分的に正しいです。これをテストしたところ、ここに私が見つけたものがあります。

dbml デザイナーで、UpdatedOn列に次のように設定します。

Auto Generated Value = True 
Nullable = False

次に、SQL Server プロファイラーINSERTを使用して生成された SQL を確認すると、それがINSERT に含まれていないことがわかります。null 値でさえありません。これは重要です。SQL Server がその列に既定値を使用するに、. に設定した場合、LINQ to SQLはnull 値を持つの列を含む可能性があります。UpdatedOnINSERTNullable = TrueUpdatedOnINSERT

参考までに、LINQ to SQL が自動生成された値を取得している場所INSERTがあるはずなSELECTので、エンティティ オブジェクトには最新の値が含まれます。

于 2011-01-20T19:37:27.070 に答える
3

dbml を開き、自動生成されるフィールドに対して "Auto Generated Value" = true をオンにします。あなたはnullを渡すことですべてうまくいくはずです

于 2011-01-20T17:16:33.147 に答える
2

DBMLを使用してファイルを開き、null を許可XML Editorしてその列のタイプを からDateTimeに変更することをお勧めしますDateTime?。保存すると、コードが生成されます。

LINQ to SQLエラーが発生するたびDBMLに、自分で編集することをお勧めします。

于 2011-01-20T17:12:35.550 に答える