質問: **2019アップデート/ TLDR; Entity Framework *Core* (またはその他)に切り替えます** いくつかの「機能」を欠落している一方で、EFコアは、適切に主キーに加えて、代替キー(ユニーク制約別名)を称えるため、リレーショナル代数を尊重する*より*良い仕事をしていません。それ以外の場合はYMMV。少なくとも、より多くのSQLスキームを正しくサポートしています。 追加されたこのサポートは(非常に時代遅れの) EF Core 1.0リリースにありました。元のEFがこの設計の欠陥に対処しなかったことに少しがっかりしました。 --- これは私の他の質問に関連している可能性があります-それは次のいずれかのようです: 1. Entity Frameworkは*ひどい*リレーショナル代数マッパー1です。 2. (私はそれを望んでいます)私はSSDL / CSDLとEDMXモデルまたはEFマッピング全般で何かを見落としています。 *Schema First*モデルがあり、スキーマは次のようになります。 ``` ExternalMaps --- emap_id - PK Melds --- meld_id - PK emap_id - >>UNIQUE INDEX<< over not-null column, FK to ExternalMaps.emap_id ``` 検証のために、これらは次のようにスクリプト化されます。これにより、 `ExternalMaps:1 <-> 0..1:Melds` 2が多数*必要に*なります。 ``` ALTER TABLE [dbo].[Melds] WITH CHECK ADD CONSTRAINT [FK_Melds_ExternalMaps] FOREIGN KEY([emap_id]) REFERENCES [dbo].[ExternalMaps] ([emap_id]) CREATE UNIQUE NONCLUSTERED INDEX [IX_Melds] ON [dbo].[Melds] ([emap_id] ASC) ``` ただし、EDMXデザイナーを使用してデータベース(SQL Server 2012)からゼロから更新すると、 `ExternalMap:1 <-> M:Meld`として関連付け/外部キーリレーションが*誤って*作成されます。 Meldの多重度を(デザイナーの "Association Set"プロパティを介して)手動で`1`または`0..1`に変更しようとすると、次のようになります。 > 実行中の変換:多重度は、関係「FK_Melds_ExternalMaps」のロール「Meld」では無効です。依存ロールプロパティはキープロパティではないため、依存ロールの多重度の上限は`*`なければなりません。 > > (他の質問と同様に、これは一意の制約が候補キーとして正しく登録されて*いない*ことに関連しているようです。) モデルによって確立された*`1 <-> 0..1/1`多重度をEFに尊重させるにはどうすればよい*ですか? --- 1これが事実でないことを願っていますが、EFを完全に有効なRAモデルにマッピングしようとしても、悲しみに終わりはありませ*ん* 。LINQto SQL(L2S)にはこの問題はありませ*ん* 。私の他の質問は、このような人気のあるORMについては簡単に答えられなかったので、このツールに対する信頼を失いつつあります。 2 FKが他の方法ではないのは、設計上です:「null可能な外部キーを持たないでください」。 - 2009年のこの回答が修正として示唆しているように、「共有」PKでもあり*ません* 。 私はEF 6.1.1、VS 2013 Ultimateを使用していますが、「OOサブタイプ機能」は使用し*ません* 。 --- *ため息を*編集: 依存ロールプロパティはキープロパティではないため、多重度は無効ですか? (2011年から) -これは*まだ*でEFの「Microsoft-承認エンタープライズ・レディ」ORMのためのケースです ~~2014~~ 2015? このレートでは、次回EFが使用されなかった理由を尋ねられたときに、「LINQ to SQLが正常に機能する」以外の多くの理由があります。
回答: 問題は、Entity Frameworkの、彼らが意味するものではユニーク制約の概念と、すべてを「理解」しません(EF6.1てEF4からは、誰がどのくらい長く知っている)ということである:EFマップコードまず、ない関係代数**ため息** 私の関連質問に対するこの回答は、 *足りない機能*を追加するためのリクエストへのリンクを提供し、それを要約したものです。 > .. Entity Frameworkは現在*、主キーへの参照制約の基底付けのみをサポートしており、一意の制約という概念はありません* 。 > > これは、この質問で提起された多重度の問題を含む、Unique ConstraintsとCandidate Keysを扱うほとんどすべての分野に拡張できます。 特にEFがSchema FirstをサポートしたりL2Sを置き換えたりすることを強く望んでいるときには、このEFの厳しい制限が公然と議論され、「よく知られた」ようにされたなら、私は幸せです。私の見解では、EFはCode Firstだけを一流の市民としてマッピングする(そしてサポートする)ことを中心としています。あと4年で...