0

私は現在 OData V4 を使用しており、アカウントと製品の 2 つのテーブルに参加したいと考えています。

テーブルは次のとおりです。アカウント: ID、名前、住所、カラーコード、

製品: ID、AccountId

Product テーブルの AccountId は、Account テーブルの Id フィールドにマップされた外部キーです。

私のビルダーには次のものがあります:

var ProductType= builder.EntityType<Product>();

Product エンティティを作成するときに、Account エンティティから「ColorCode」値を取得したいと考えています。

モデルビルダーでこの関係を確立するにはどうすればよいですか?

製品クラスを次のようにしたいと思います。

public  class Product
{
    public string Id { get; set; }
    public string AccountId { get; set; }
    public string ColorCode { get; set; }

}
4

1 に答える 1

1

OData を使用すると、エンティティ間の関係を定義できます。Web API 2.2 for OData V4 を使用してサービスを作成しているようです。この場合、次のように製品とアカウントの間の関係を構築できます。

まず、製品の POCO クラスの定義で、そのアカウントのナビゲーション プロパティを追加する必要があります。

public class Product{
    public int Id {get;set;}
    public string AccountId {get;set;}
    public Account Account {get;set;} // define "Account" as a navigation property of Product

public class Account{
    public int Id {get;set;}
    public string Name {get;set;}
    public Address Address {get;set;} // Address may be a complex type
    public int ColorCode {get;set;}
}

次に、 から継承するクラスで、DbContext両方のエンティティに関する情報を次の場所に追加します。

public virtual DbSet<Product> Products { get; set; }
public virtual DbSet<Account> Accounts { get; set; }

最後に、WebApiConfig.cs で、ODataConventionModelBuilder必要に応じて使用してモデルを定義します。モデル ビルダーは、POCO クラスからの関係を自動的に認識し、モデルを生成します。

サービスが構築された後、クライアント側で、クライアントは次のようなリクエストを送信して、製品とそのアカウントのカラーコードを取得します。

GET http://host/service/Products?$expand=Account($select=ColorCode)

ここで例を確認できます: http://services.odata.org/v4/(S(xrtmlkz1igiqidututicmb2t))/TripPinServiceRW/People ?$expand=Trips($select=TripId)

于 2014-12-03T05:08:59.830 に答える