2009-07-13 23 views
22

Linq-to-SQLを使用して既存のテーブルに列を追加し、その新しい列に既定値を設定すると、Linq to SQLは既定値を無視します。 他の誰かがこの現象を経験していますか? Linq-to-SQLまたはSQL Serverがデフォルト値を自動的に設定するように、修正する方法はありますか?Linq-to-SQLはSQL Serverのデフォルト値を無視します

私が追加された列は、私はこれを見てきました。1.

+1

重複:http://tackoverflow.com/q/201706/11683(投票には投票しません。どちらも同じように便利です)。 – GSerg

答えて

11

this blogの例を使用してこれを確定しました。

partial void OnCreated() { 
    if (this.DateTimeCreated == null) { 
      this.DateTimeCreated = DateTime.Now; 
    } 
} 

私は、デフォルトの1が自動的にDBMLで何かを変更するたびに上書きされるように、部分のDataContextクラスにこれを渡すために必要な。

+0

私のソリューションは問題を解決していませんか? –

+1

あなたのソリューションは挿入時に動作しますが、レコードを更新すると、データベースに生成された一部のメンバーに関するエラーが発生することはありません。 – jao

+1

自動同期を「常に」に設定しましたか? –

4

に設定されたデフォルト値で、タイプビットでした。あなたができることは、l2sqlデザイナーに行き、デフォルト値を持つテーブル列のプロパティを表示することです。 "自動生成値"というプロパティがあり、それをtrueに設定します。

この同じ値は、SQL Serverが行IDを生成している場合と同じように、自動的にID列に対してtrueに設定されます。

+1

後で列を更新する必要があるため、これは機能しません。あなたのソリューションを試してみると、「データベースで計算または生成されたメンバーは変更できません」というエラーが表示されます。 – jao

+0

それは悪いことです。私は後で(私はDateCreated列のためにそれを使用していた)変更したいフィールドでそれを試したことはありません。そのような場合でも、私はSQLのデフォルト値を使用せず、自分のコードで明示的に設定することにしました。つまり、推論は自分のドメインロジックの一部であり、残りのドメインロジックコードに属しています。 –

+0

私が得るエラーはLinq-to-SQLのバグだと思います。 「自動生成値」のツールチップに「値は挿入時に自動生成されます」というメッセージが表示されます。 – jao

7

デザイナーに行き、 "OnInsert"の "Auto-Sync"値を選択します。レコードがデータベースに挿入されると、値が同期されます。

+0

http://www.intrepidstudios.com/blog/2009/2/6/using-default-values-in-linq-to-sqlを参照してください。詳細についてはaspxを参照してください。これは決定的なアプローチです。 – GONeale

+1

@GONeale:デッドリンク。 –

+2

これは動作しません。オブジェクトを挿入するときに値を省略することはできません。もしそうであれば、正しいアクションがクエリ内に全く値をリストしないことになるときに、カラム値として 'null'を挿入しようとします。したがって、列がnullでない場合、「nullをnull以外の列に挿入できません」というエラーが発生します。 – GSerg

11

自動生成プロパティをTrueに設定します。

enter image description here

+2

これは動作しません。これは常にデフォルト値を使用したい場合に機能しますが、オブジェクトを挿入するときにデフォルト以外の値を使用することはできません。 Linq2Sqlはあなたが指定した値を無視し、デフォルト値を読み返します。 – GSerg

1

私は偽のデフォルトとブールデータ型の同じ問題に直面し、その値 を更新していなかった私は、データベーステーブルを参照するときだから、私は、設定された主キーがゆえとき、そこにはない発見されました私は更新された主キーを設定しました。 テーブルに主キーがあるかどうかを確認してください。

1

独自のコードで値を変更する必要がある場合(たとえば、デフォルトのタイプテーブル値など)、 '自動生成値'を使用しないでください。それを更新すると後で取得されます。

Value of member 'AlternativeQuoteStatus' of an object of type 'OrderDetail' changed. A member that is computed or generated by the database cannot be changed.

私は、オブジェクトを作成するときにここで他者によって記載されるようにOnCreatedにフォールバックして、そのような値を設定することを好みます。

関連する問題