3

私は2つのテーブルを持っています:

CREATE TABLE Order (
    orderId INTEGER IDENTITY NOT NULL,
    PRIMARY KEY (orderId) 
)

CREATE TABLE OrderAdditionalDetails (
    additionalDetailsId INTEGER IDENTITY NOT NULL,
    orderId INTEGER NOT NULL,
    PRIMARY KEY (additionalDetailsId),
    FOREIGN KEY (orderId) REFERENCES Order(orderId)
)

OrderAdditionalDetails テーブルの orderId フィールドで宣言された外部キー (FK_OrderAdditionalDetails_Order) があります。OrderAdditionalDetails テーブルの orderId フィールドにも「一意」の制約があります。各「注文」は、「OrderAdditionalDetails」テーブルに 0 個または 1 個のエントリを持つという考え方です。

これはすべてエンティティ フレームワーク モデル ファイルによって取得されますが、Navigation プロパティを作成しようとすると、1 対多の関係しか宣言できません。私が得るエラーは次のとおりです。

実行中の変換: 関係 'FK_OrderAdditionalDetails_Order' のロール 'OrderAdditionalDetails' では多重度が無効です。依存ロール プロパティはキー プロパティではないため、依存ロールの多重度の上限は * でなければなりません。

これが何を意味するのか本当にわかりません-エラーをグーグルで調べても役に立ちませんでした。私が間違っていることに誰かが光を当てることができますか?

4

3 に答える 3

2

OrderAdditionalDetailsテーブルで、additionalDetailsID列を削除して を にorderIDしますCLUSTERED PRIMARY KEYFOREIGN KEYすでに持っているものを保管してください。それがこれを実装する正しい方法です。

列によって値が追加されないだけでなくadditionalDetailsId、テーブル内のスペースが増えて事態が悪化します。はorderIDすでに十分なキーです。の代理にすぎorderIDない二次人工鍵は必要ありません。

于 2012-12-27T06:52:20.957 に答える
1

UNIQUE1 対 0 または 1 の関係を強制するには、外部キーを定義する必要があります。

たぶん、次のようなことを試してください:

CREATE TABLE OrderAdditionalDetails (
    additionalDetailsId INTEGER IDENTITY NOT NULL,
    orderId INTEGER NOT NULL UNIQUE,
    PRIMARY KEY (additionalDetailsId),
    FOREIGN KEY (orderId) REFERENCES Order(orderId)
)

関連項目: SQL Server での 1 対 0 または 1 の関係の実装

于 2012-07-20T21:47:17.467 に答える
0

テーブルをそれ自体のビューと他のフィールドに関連付けようとしていました。(これには、答えとは関係のない非常に正当な理由があります)

同じエラーの原因は、ビューに複数のキー フィールドがあったことです。アソシエーションに関連するフィールドを指定しましたが、1 対 1 が機能するためのキー フィールドは両方とも必要でした。

また、ビューでキー フィールドを Distinct に設定しましたが、他のフィールドのキー属性を削除する前にそれを行ったので、必要な場合とそうでない場合があります。

于 2014-11-03T16:41:06.727 に答える