1

我第一次检查 WCF 数据服务和 OData,我想知道在实体模型中使用继承是否是不好的做法?它似乎没有得到很好的支持。

例如,我遇到了 OData 问题,我想过滤派生类型的属性。但似乎只能过滤基本类型的属性?

这失败了:http://[localhost]:8080/Entities?$filter=startswith(Text,'bla')

无论如何,创建非派生实体类型并具有接口以“协调”不同实体类型中的属性是否更好?

例如:

EntityBase -> Id, ParentId

笔记本:EntityBase -> 标题

注意:EntityBase -> 文本

或者

IEntity -> Id, ParentId

笔记本:IEntity -> Id、ParentId、Title

注意:IEntity -> Id、ParentId、Text


为什么 5.1.0-rc1 仍然不支持 $format-tag?

4

1 回答 1

2

$format 将很快得到支持。由于意识形态原因和有简单的解决方法,这一直是较低优先级。在此之前,您可以使用Pablo 在博客中提到的JSONP 属性。无论如何,在接下来的几个月中,您应该会看到我们的堆栈支持 URL 中的 $format。

至于派生类型,据我所知,大多数操作应该可以正常工作。要过滤派生类型的属性,您需要先转换为该类型。例如,在我的 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 中,注意转换为我要过滤的类型(使用完全限定的实体类型名称)。

于 2012-08-11T07:25:41.697 回答