我有一个Web Api 2服务器,一个Entity Framework数据层和一个BreezeJS客户端。我有一些额外的属性没有映射到我想在查询时设置的数据库。类似的东西:
public class Foo
{
// Various mapped properties
// ...
// These properties are not mapped, and I want
// to set them on the returned data depending
// on the current user's roles/authorization
public bool CanEdit { get; set; }
public bool CanDelete { get; set; }
}
[BreezeController]
public class BreezeController : BaseController
{
// ...
[HttpGet]
public IQueryable<Foos> Users()
{
// How can I set the CanEdit and CanDelete properties
// here (and only on the data as filtered by the OData
// queries)?
return Db.Foos; // Db.Foos is a DbSet<Foo>
}
}
有没有办法做到这一点?
注意:确定CanEdit
/ CanDelete
的逻辑太复杂,无法包含在LINQ to Entities查询中。
答案 0 :(得分:0)
我最终通过从QueryHelper
派生并挂钩到PostExecuteQuery()
来解决这个问题。请参阅我的回答here。
答案 1 :(得分:0)
就OData而言,有2个概念适用于您的案例。
第一个是开放类型,它允许您向实体添加未定义的属性。您可以参考此博客How to Use Open Type in OData以获取更多信息。最新的WebApi OData支持开放复杂类型。
第二个是自定义注释,可用于定义与您的实体关联的其他信息。在你的情况下,你可以写&#34; @ Foo.CanEdit:true&#34;进入实体有效负载,告诉客户端您的Foo实体是可编辑的。同样适用于&#34; CanDelete&#34;。
如果您想了解更多信息,我可以提供有关开放式和自定义注释的更多信息。