1

2 つのアプリケーションで使用される SQL データベースを使用する既存のアプリケーションを開発しています。1 つは Entity Framework を使用してデータベースに接続します。もう 1 つは LINQ-to-SQL を使用します。SQL データベースは、2 つのテーブルの行間の多対多の関係を示すいくつかのテーブルが存在するように設計されています。Entity Framework はこれらのテーブルをインポートしないようです。これは、多対多の関係を表現するオブジェクト指向の考え方があるためと思われます。これまでは、Entity Framework アプリケーションがこれらのテーブルについて知る必要はありませんでしたが、今では知る必要があります。私はそれがどのように機能するのかわかりませんし、これらの関係を表現する Entity Framework のエキサイティングな新しい方法について学んだとしても、それが他のアプリケーションや多くの関数を使用するように設計されたデータベースとうまく連携しないのではないかと心配しています。 -対多テーブル。

つまり、Foo のテーブルと Bar のテーブルがあり、次に Foo と Bar の ID を含むテーブルがあり、どの Foo がどの Bar に関連しているかをリストしています。この関係テーブルを頻繁に使用する別の LINQ アプリケーション。

質問:

Entity Framework の多対多システムの使用法を習得した場合、他のアプリケーションが使用する多対多テーブルを使用および更新しますか?

そうでない場合、既存のテーブルを使用するコードを記述できるように、Entity Framework が多対多の関係テーブルを無視しないようにする良い方法は何ですか?

4

1 に答える 1

4

はい、Entity Framework が多対多テーブルを管理します。EF の純粋なリンク テーブル (外部キー列が 2 つしかない) は、POCO オブジェクトではなくリレーションシップとして表されます。これを行う方法は、2 つのオブジェクト間にリレーションシップがあり、テーブル X がこのリレーションシップを格納する場所であることを EF に伝えることです。EF 4.1 の例として。これは私が現在使用しているもので、次のように行われます。

modelBuilder.Entity<Foo>() //Let me tell you about Foo...
            .HasMany(f => f.Bars)  //The property in the Foo class that links to Bar objects is Bars
            .WithMany(b => b.Foos)  //The property in the Bar class that links to Foo objects is Foos
            .Map(m => {
                m.MapLeftKey("FooID"); //Name of the foreign key column in the link table for Foo
                m.MapRightKey("BarID"); //Name of the foreign key column in the link table for Bar
                m.ToTable("FooBar"); //Name of the link table
            });

その後、コード内のオブジェクトをリンク/リンク解除することで、このテーブルを変更できます。あなたはほとんど次のようなことをします

myFoo.Bars.Add(myBar); //Add a row to the link table
myFoo.Bars.Remove(myBar) //Delete a row from the link table

完全に実装するには、EF のバージョンをググってください。

追加の列 (作成日など) を含むリンク テーブルの場合、それらは他のすべてのテーブルと同様に POCO で表されます。リンク テーブルを管理する EF の機能について本当に偏執的である場合は、純粋なリンク テーブルに一意の id 列を追加することで強制的にこのルートに移動させることができますが、私は絶対に反対することをお勧めします。

次のように考えてみてください。EF が登場してからしばらく経ち、ある程度の成熟度を達成しています。これを、データベースでは多対多の関係がまったく珍しくないという事実と組み合わせてください。EF の設計者があなたのケースを扱っていないと本当に思いますか?

于 2013-03-12T04:24:00.917 に答える