我第一次检查WCF数据服务和OData,我想知道在实体模型中使用继承是不好的做法?它似乎没有得到很好的支持。
例如,我遇到了OData的问题,我想在派生类型的属性上进行过滤。但似乎只能过滤基类型属性?
这失败了: HTTP:// [本地主机]:8080 /实体$滤波器= startswith(文字, 'BLA')
在任何情况下,创建非派生实体类型并在不同实体类型中具有“协调”属性的界面是否更好?
例如:
EntityBase - > Id,ParentId
Notebook:EntityBase - >标题
注意:EntityBase - >文本
或
IEntity - > Id,ParentId
笔记本:IEntity - > Id,ParentId,Title
注意:IEntity - > Id,ParentId,Text
为什么仍然不是5.1.0-rc1支持的$ format-tag?
答案 0 :(得分:2)
$ format将很快得到支持。由于意识形态原因以及简单的解决方法,这一点的优先级较低。在此之前,您可以使用Pablo撰写的JSONP attribute博客。无论如何,您应该在接下来的几个月内看到我们的堆栈支持URL格式。
对于派生类型,大多数操作应在我所知的情况下正常工作。要过滤派生类型的属性,首先需要强制转换为该类型。例如,在我的Scratch服务中,我有以下类:
namespace Scratch.Web
{
public abstract class Product
{
public int ID { get; set; }
public string Name { get; set; }
public Product RelatedProduct { get; set; }
}
public class DiscountedProduct : Product
{
public double Discount { get; set; }
public ICollection<Category> Categories { get; set; }
}
// ...
}
这使我能够发出如下查询(这将获得折扣大于10的所有折扣产品):
http://localhost:59803/ScratchService.svc/Products/Scratch.Web.DiscountedProduct?$filter=Discount gt 10.0
在URL中,注意转换为我要过滤的类型(使用完全限定的实体类型名称)。