WCF数据服务和OData中的派生实体类型

时间:2012-08-10 20:24:43

标签: .net wcf wcf-data-services odata

我第一次检查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?

1 个答案:

答案 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中,注意转换为我要过滤的类型(使用完全限定的实体类型名称)。