3

一部の列に異なるルックアップ テーブルを参照する外部キーがある SQL Server テーブル構造があります。これらの列は、レコードの保存中に が渡された場合に割り当てたいデフォルト値であるため、ルックアップ値として作成さNOT NULLれます。DEFAULT value = 1ID = 1NULL

Add/Update/Deleteただし、この子テーブルのレコードを作成しようとすると、以下のエラーが発生しました。

An attempt was made to remove a relationship between a (*) and a (*). However, one of the relationship's foreign keys (X) cannot be set to null. 

私はたくさん検索しようとしましたが、これを解決するために手動でLINQをSQLコードまたはXMLに変更する解決策を得ました。将来、テーブルが変更されるたびに、手動での変更が毎回適用されていることを確認する必要があるため、それはできません。

NULLまた、 LINQ To SQL を介して同じテーブルを使用する他のアプリケーションに影響を与えるため、列を受け入れるように変更することはできません。

これには、より管理しやすいソリューションが必要です。

4

2 に答える 2

1

Code itself から Table クラスのプロパティにデフォルト値を割り当てることで、これを解決しました。私が理解したのはこれです。LINQ to SQL は、DB から設定された既定値を考慮しません。また、列は NOT NULL です。そのため、INT 列であるため、.NET がこれらのプロパティに割り当てたデフォルト値は 0 でした。現在、データベースに ID = 0 のマスター エントリはありません。また、DB はこの列の NULL 値を取得しなかったため、デフォルト値をまったく適用しようとしません。

したがって、レコードを保存する前に、このプロパティにバインドされているコントロールが NULL 値を持っていることがわかった場合 (何も選択されていない/コントロールが非表示になっているなど)、コード自体からデフォルト値を割り当てます。これにより、データベースにフォールバックしてデフォルトを割り当てる必要がなくなります。

今、すべてがうまくいっています。どこからも満足のいく回答が得られなかったので、これを共有することを考えました。

于 2013-07-02T05:59:02.387 に答える