0

私はテーブルを持っています

観光客

  1. Tourist_ID

    2.お名前


追加料金

  1. Extra_Charge_ID
  2. 説明

Toutist_Extra_Charges

  1. Tourist_Extra_Charge_ID - 主キー
  2. Tourist_ID - 外部キー
  3. Extra_Charge_ID - 外部キー

エンティティフレームワークentを使用してこのSQLクエリを作成しようとしています

    "Select Tourist.Name, Extra_Charges.Extra_Charge_Description, FROM Tourist

LEFT JOIN TOURIST_EXTRA_CHARGES on Tourist.Tourist_ID = TOURIST_EXTRA_CHARGES.Tourist_ID 
LEFT Join EXTRA_CHARGES on TOURIST_EXTRA_CHARGES.Extra_Charge_ID = EXTRA_CHARGES.Extra_Charge_ID
WHERE Tourist.Tourist_ID=86

id=86(extra_charges を持っていない場合のイベント) の観光客の名前を取得したいのですが、彼が EXTRA_CHARGES を持っている場合 - EXTRA_CHARGE の説明

私はエンティティフレームワークが初めてなので、次のことを試しました

foreach (var tourist in db2.Tourist.Include("TOURIST_EXTRA_CHARGES").Include("EXTRA_CHARGES").Where(x=>x.Tourist_ID==86))
                  {
                      lblproba.Text+="Name" + tourist.Name_kir+" Description" + tourist.TOURIST_EXTRA_CHARGES.//don't have access to extra_charges table


                  }

しかし、tourist.TOURIST_EXTRA_CHARGES と入力すると、extra_charges テーブルとその Description 列にアクセスできません。


編集:

多対多の関係でエンティティ フレームワーク マッピングを使用するには、列 TOURIST_EXTRA_CHARGE_ID を削除し、複合主キーを作成する必要があることを読みました。しかし、それを行って新しい edmx モデルを作成すると、Tourist_Extra_Charges テーブルが表示されなくなりました。そして、モデルを何度作成しても、このテーブルはモデルに発生しませんでした

4

2 に答える 2

1

I now can't see my Tourist_Extra_Charges table

That's expected for the link table in a many-to-many relationship and you don't need this table as an entity.

Your Tourist entity should now have a collection EXTRA_CHARGES and you can perform your query like so:

var tourist = db2.Tourist
    .Include("EXTRA_CHARGES")
    .SingleOrDefault(t => t.Tourist_ID == 86);

if (tourist != null)
{
    lblproba.Text += "Name "
        + tourist.Name_kir
        + " Description "
        + string.Join(", ", tourist.EXTRA_CHARGES.Select(e => e.Description));
}

I have replaced the foreach loop by SingleOrDefault because you are querying by the primary key which can only have one result (or none). The EXTRA_CHARGES.Select(e => e.Description) extracts the description from each extra charge and returns a new collection of strings. string.Join concats all those descriptions in the collection together and separates them by a comma.

于 2013-09-25T18:41:30.547 に答える
0

データベース構造が間違っています。many2many 関係を使用して 2 つのテーブルをリンクする必要がある場合は、もう 1 つのテーブルを追加する必要があります。これは、他の 2 つのテーブルからの 2 つの PK を含む「ブリッジ」テーブルと呼ばれます。そして、あなたがそれを持っているとき、EFはそれを関係プロパティとして「many2many」として自動的に解決します

于 2013-10-03T11:04:35.917 に答える