私はC#ベースのODataソースを持っていますが、$ expandを動作させるのに問題があります。 StackOverFlowに関連するすべての記事は、OData V4の下で動作する/動作しないコントローラメソッドパターンがたくさんあるため、OData V4以前を参照しているようです。
私の問題:私は2つのエンティティTable1とTable2を持っています。そこには多対1の関係があります。 Table1には、その関係を円滑にするために使用されるFK Table2Idを持つTable2というナビゲーションプロパティがあります。
[Serializable, DataContract]
public class Table1
{
[DataMember, Key]
public int Id { get; set }
[DataMember]
public Table2 Table2 { get; set; }
[DataMember, ForeignKey("Table2")]
public int Table2Id { get; set;}
}
[Serializable, DataContract]
public class Table2
{
[DataMember, Key]
public int Id { get; set }
public string Name { get; set;}
}
私はURL送信時:
http://localhost/OData4/api/Table1s?$expand=Table2
を私はエラーを取得:
The query specified in the URI is not valid. Could not find a property named 'Table2' on type 'System.Web.OData.Query.Expressions.SelectAllAndExpand_1OfTable1
は、ここに私のコントローラです:
[EnableQuery]
public IHttpActionResult Get(ODataQueryOptions<Table1> queryOptions)
{
IQueryable result;
// validate the query.
try
{
queryOptions.Validate(_validationSettings);
var dataSet = container.Get().AsQueryable(); // I can see Table1.Table2 here
result = queryOptions.ApplyTo(dataSet); // result has list of Table1 with Table2 nav property
}
catch (ODataException ex)
{
throw new HttpRequestException(ex.Message);
}
return Ok(result, result.GetType());
}
protected IHttpActionResult Ok(object content, Type type)
{
Type resultType = typeof (OkNegotiatedContentResult<>).MakeGenericType(type);
return Activator.CreateInstance(resultType, content, this) as IHttpActionResult;
}
これはApplyTo鋳造に関連すると思われますその結果はTable1型はもはやそのようなラッパーではありません。しかし、このメソッドで例外がスローされることなく、私は問題が実際にどこにあるのか把握できません。
私はnuGetパッケージ 'Microsoft ASP.Net Web API 2.2を使用しています。 OData V4.0 'V5.9.0用です。