私のデータベーステーブルはこのようなものです
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 サーバー時間を使用する必要があります。