質問

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

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をSQLに使用しています。 C#では、[金額]および[備考]フィールドとその他のフィールドのみを渡す必要があります。

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 DateTime範囲に違反します 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM 例外を発生します。また、null値を手動で割り当てることはできません DateTime ヌル可能なタイプではないため、フィールド。とにかく、デフォルトの制約を使用するためにこれを作成する必要があります。どうすればいいですか?


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

役に立ちましたか?

解決

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

あなたのDBMLデザイナーで、あなたの UpdatedOn 列を設定します。

Auto Generated Value = True 
Nullable = False

次に、 INSERT 使用する場合 SQL Server Profiler 生成されたSQLを見るには、 UpdatedOnインサートには含まれていません. 。ヌル値すらありません。これは重要です:SQL Serverがそのcolumのデフォルト値を使用するために、列 省略する必要があります から INSERT. 。設定した場合 Nullable = TrueUpdatedOn, 、linqからsql そうかもしれない に列を含めます INSERT ヌル値で。

参考までに、その直後 INSERT aが必要です SELECT LINQからSQLが自動生成値を取得している場合、エンティティオブジェクトには最新の値があります。

他のヒント

DBMLを開き、自動生成されたフィールドに「自動生成値」= trueをオンにします。あなたはすべてヌルを渡すのに良いはずです

私はあなたがあなたを開くことをお勧めします DBML ファイルを使用します XML Editor その列のタイプをから変更します DateTimeDateTime? ヌルを許可することによって。保存すると、コードが生成されます。

いつでも LINQ to SQL 間違った生成 DBML, 、自分で編集する方が良いです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top