我有以下型号:
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
[...]
public int OfficeId { get; set; }
public string OfficeInfo
{
get { return Office.Info; }
}
public Office Office { get; set; }
}
public class Office
{
public int OfficeId { get; set; }
public string Info { get; set; }
}
我在客户端有一个网格,我想用Employee实例提供哪些行,包括其中一列中的OfficeInfo,所以我通过以下查询使用它:
“?/的OData /员工$扩大=办公室及安培; $选择= EMPLOYEEID,名称,OfficeInfo”
我在IEdmModel中注册了两个实体:
private static IEdmModel GetEDMModel()
{
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Employee>("Employees");
builder.EntitySet<Office>("Offices");
[...]
}
我的Get动作如下所示:
[EnableQuery]
public IQueryable<Employees> Get()
{
[...]
}
但我一直得到这个例外:
“无法在类型'Xds.Entities.Employee'上找到名为'OfficeInfo'的属性”
我在这里缺少什么?
答案 0 :(得分:0)
您可以检查您的模型元数据,看看是否会出现在&lt; Xds.Entities.Employee&#39;类型。
<Property Name="OfficeInfo" Type="Edm.String" />
由于它是一个只读属性,你应该打开isQueryCompositionMode让它显示在模型中,就像(可以在那里传递真正的HttpConfiguration):
ODataModelBuilder builder = new ODataConventionModelBuilder(new System.Web.Http.HttpConfiguration(), true);
之后,查询应该有效。
请注意,标记标记为测试目的,但如果您手动验证元数据,则应该没用。
答案 1 :(得分:0)
您可以根据需要标记属性OfficeInfo
或明确添加此属性:
根据需要注明:
builder
.EntitySet<Employee>("Employees")
.EntityType
.Property(_ => _.OfficeInfo)
.IsRequired();
明确添加:
builder
.EntitySet<Employee>("Employees")
.EntityType
.Property(_ => _.OfficeInfo)
.AddedExplicitly = true;