1

EFデータベースの最初のedmxで定義されたモデルがあります。そこから、いくつかのテーブルとビュー (主にビュー) を公開します。OData を使用して EF モデルを拡張することは可能ですが、複合型のナビゲーション プロパティを別の EF および OData 公開型に追加するにはどうすればよいでしょうか?

現在、部分クラスを定義し、それらを使用してプロパティと属性を追加しています。しかし、OData の modelbuilder 機能を使用して必要なプロパティを追加することも可能であるように見えます。または、最初に使用ODataConventionModelBuilderしてから結果を拡張することもできます。残念ながら、既存の API ドキュメントと私が見つけた例から実際の例をつなぎ合わせることができません。

これがコードです

//This class is generated from a view by EF (edmx)...
public partial class AccountView
{
    public System.Guid Id { get; set; }
    public int CompanyId { get; set; }
}

//Here's augmenting the EF generated view with some additional data...
[MetadataType(typeof(AccounViewMetaData))]
public partial class AccounView
{  
    //This is added here explicitly. AccountView itself exposes just
    //a naked key, CompanyId.
    public virtual Company Company { get; set; }

    //This is just in case...
    public class AccounViewDomainMetaData
    {
        //This is to add a navigation property to the OData $metadata. How to do this
        //in WebApiConfig? See as follows...
        [ForeignKey("Company")]
        public int CompanyId { get; set; }
    }
}

//This is an EF generated class one from an edmx..-
public partial class Company
{
    public Company() { }
    public int CompanyID { get; set; }
    public string Name { get; set; }
}

//How to add a navigation property from AccountView to Company so that it'd become
//possible to call http://example.com/Accounts?$expand=Company and http://example.com/Accounts(1)?$expand=Company ?
var builder = new ODataConventionModelBuilder();
var companySet = builder.EntitySet<Entities.Company>("Companies");
var accountSet = builder.EntitySet<Entities.AccountView>("Accounts");
accountSet.EntityType.HasKey(i => i.Id); //EF has hard time recognizing primary keys on database first views...
//How to hide this from the result if there's a way to create a ?$expand=Company navigation property?
//accountSet.EntityType.Ignore(i => i.CompanyId);

これは、OData とモデルに関する私の他の質問に関連しています。

4

0 に答える 0