19

主キー(PK)と外部キー(FK)を持つ2つのSQL Serverテーブルがあり、2つのテーブルをリンクしています。

1) Table "Order"

OrderID, int, PK  
AddressID, int, FK
...

2) Table "Address"

AddressID, int, PK
City, nvarchar(50)
...

次に、これら2つのテーブルから(ADO.NET)エンティティデータモデルを作成しました。次に、(ASP.NET)Webページに、EntityDataSourceを含むGridViewを配置しました。GridViewで、2つの列を表示したいと思います。

  • OrderID
  • 都市(その順序に属し、AddressIDキーでリンクされている)

どうやってやるの?私の問題は次のとおりです。エンティティデータソースを構成するときに、「Order」または「Address」のいずれかを選択できますが、両方を選択することはできません。また、任意の種類の関係を選択することもできません。EntitySetNameとして「Order」を選択すると、GridViewで列を追加できます

  • OrderID
  • 住所
  • Address.AddressID

「アドレス」列を追加すると、空のセルが表示されます。「OrderID」と「Address.AddressID」を追加すると、予想されるIDが表示されます。しかし、どうすれば関連する住所の「都市」をGridViewに追加できますか?

よろしくお願いします!

編集:明確化:

Entity Frameworkは、データベーステーブルに対応するクラス「Order」とクラス「Address」を作成しました。クラス「Order」には、ナビゲーションプロパティとして「Address」オブジェクトへの参照があり、AddressテーブルとOrderテーブルの間の1-n関係に対応しています。

基本的に、GridViewにOrder.Address.Cityを表示する列が必要です。データフィールドとして「Address.City」を含むバインドされたフィールドをGridViewに追加しようとしましたが、実行時エラーが発生します(「そのようなプロパティはありません...」)。

4

1 に答える 1

43

OK、何時間も経ってから、自分で解決策を見つけました。

オプション1:

EntityDataSourceのselectプロパティを使用して、いくつかの関連するエンティティ/データベーステーブル(私の場合:OrderエンティティのOrderIDとAddressエンティティのCity)からデータの任意の投影を作成することができます。

欠点: EntityDataSourceでselectを使用すると、GridViewでInsert、Update、およびDeleteを使用できなくなります。

オプション2:

EntityDataSourceには、クエリされた注文とともに関連するアドレスプロパティを含めるためのincludeプロパティが必要です。マークアップは次のようになります。

<asp:EntityDataSource ID="EntityDataSourceOrders" runat="server" 
    ConnectionString="name=MyEntitiesContext" 
    DefaultContainerName="MyEntitiesContext" 
    EntitySetName="Order" Include="Address"
    EnableDelete="True" EnableInsert="True" 
    EnableUpdate="True">
</asp:EntityDataSource>

次に、GridViewの列コレクションに次のようなテンプレートフィールドを含めることができます。

<asp:TemplateField HeaderText="City" >
  <ItemTemplate>
    <asp:Label ID="LabelCity" runat="server" Text='<%# Eval("Address.City") %>'>
    </asp:Label>
  </ItemTemplate>
</asp:TemplateField>

ここで評価は重要です。バインドは機能しません。また、BoundFieldを列として使用しています...

<asp:BoundField DataField="Address.City" HeaderText="City" />

...不可能です。したがって、GridViewで都市を編集することはできません(これは、関連するフィールドが別のテーブルに属し、おそらく他の多くの順序に属しているため、意味があります)。ただし、注文エンティティのフラットフィールドと、注文の「AddressID」を編集して別の住所を割り当てることは可能です。

于 2010-02-18T14:45:44.377 に答える