我正在创建一个web api odata控制器,一切顺利,直到我尝试将派生字段添加到模型中。我不希望该字段存在于数据库中,并且该字段不需要是可查询的。
给定模型;
public class Foo
{
public Int64 Id { get; set; }
public string SomeDatabaseSourcedField{ get; set; }
public string SomeDerivedField{ get; set; }
}
如果我有一个像这样的控制器;
private FooDbContext db = new FooDbContext();
[Queryable]
public IQueryable<Foo> GetFoo()
{
return db.Foo;
}
如何设置SomeDerivedField
的价值?
注意:我已尝试将该字段标记为not mapped
但似乎该字段在api调用中未返回。
答案 0 :(得分:3)
这是我的答案,我使用的是odata v4。 http://aspnet.codeplex.com/SourceControl/latest#Samples/WebApi/OData/v4/ 我已成功获得响应中的派生字段。
首先,定义一个派生自foo的类:
public class MyFoo:Foo
{
public string SomeDerivedField{ get; set; }
}
其次,构建edm模型:
public static IEdmModel GetModel()
{
ODataConventionModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<MyFoo>("Foo");
builder.EntityType<MyFoo>().DerivesFromNothing();
builder.Namespace = typeof(MyFoo).Namespace;
return builder.GetEdmModel();
}
第三,检索数据:
public IHttpActionResult Get()
{
IQueryable<MyFoo> foos= db.Foos.Select(
t => new MyFoo()
{
Id = t.Id,
Name = t.Name,
SomeDerivedField= t.Name + SqlFunctions.StringConvert((double)t.Id)
});
return Ok(foos);
}