2

最初に Entity Framework (5) コードを作成しますが、コードからデータ モデルを生成するわけではありません。データ モデルを手動で同期させているだけです (思ったほど面倒ではありません)。

1対0-1の関係を築こうとしている。以下は、アドレスが 0 個または 1 個の顧客の構成例を使用したセットアップです。

編集:元の例は正しくありませんでした。顧客は 0 ~ 1 個の住所を持つことができ、住所には 1 人の顧客が含まれます。テーブルのデザインとコードの両方が更新されました。

住所
--------------
AddressId (ID)
住所テキスト
CustomerId (編集: これは一意の制約を採用しています)
お客様
--------------
CustomerId (ID)
顧客名

アドレス マッピングの関連部分:

   this.HasKey(t => t.AddressId);
   //SEE NOTE ON THIS BELOW
   //this.Property(t =>t.AddressId).
                   HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
   this.HasRequired(t => t.Customer)
       .WithOptional();

顧客マッピングの関連部分:

  this.HasKey(t => t.CustomerId);
   this.HasOptional(b => b.Address)
            .WithRequired(); 

Customer でコメントアウトされている行に注意してください。これを含めると、次のエラーが発生します。

ReferentialConstraint の依存プロパティは、ストアで生成された列にマップされます。列: 'CustomerId'。

含めない場合は、次のようになります。

IDENTITY_INSERT が OFF に設定されている場合、テーブル 'Customer' の ID 列に明示的な値を挿入できません。

高低を検索しましたが、上記のコードが推奨されるアプローチのようです。2 つのテーブルが同じ名前のキーを共有しない限り、1 対 1 の関係をモデル化できないという漠然とした言及も見ました。

この種の関係はコードでモデル化できますか?もしそうなら、正しい構文は何ですか?

4

1 に答える 1

3

マッピングが無効のようです。AddressanにはオプションCustomerの があり、 aCustomerには必須のアドレスがあると言っていますが、エンティティのAddress外部キーCustomerは null 可能であるため、関係は逆になるはずです。

Customerまた、はい、1 対 1 の関係をモデル化する場合は、主キーを持つテーブルが必要です。次に、Addressテーブルの外部キーでもある主キー列を持つCustomerテーブルが必要です。

それ以外の場合は、データベースで 1 対多の関係を実際にモデル化していることになります。

于 2012-10-23T18:20:39.263 に答える