Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WCF数据服务和OData中的派生实体类型_.net_Wcf_Wcf Data Services_Odata - Fatal编程技术网

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

.net WCF数据服务和OData中的派生实体类型,.net,wcf,wcf-data-services,odata,.net,Wcf,Wcf Data Services,Odata,我第一次查看WCF数据服务和OData,我想知道在实体模型中使用继承是否是一种不好的做法?它似乎没有得到很好的支持 例如,我在OData中遇到问题,我想对派生类型的属性进行过滤。但似乎只能根据基类型属性进行筛选 这失败了: http://[localhost]:8080/Entities?$filter=startswith(文本,'bla') 在任何情况下,创建非派生实体类型并使用接口“协调”不同实体类型中的属性是否更好 例如: EntityBase->Id,ParentId 笔记本:Enti

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

例如,我在OData中遇到问题,我想对派生类型的属性进行过滤。但似乎只能根据基类型属性进行筛选

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

在任何情况下,创建非派生实体类型并使用接口“协调”不同实体类型中的属性是否更好

例如:

EntityBase->Id,ParentId

笔记本:EntityBase->Title

注意:EntityBase->Text

属性->Id,父Id

笔记本:地址->Id,家长Id,标题

注意:IEntity->Id,ParentId,Text



为什么$format标签在5.1.0-rc1中仍然不受支持?

$format很快就会得到支持。这在一定程度上是因为意识形态的原因,也因为有简单的解决办法,所以优先级较低。在那之前,你可以使用巴勃罗在博客上写的。无论如何,在未来几个月的某个时候,您应该会看到我们的堆栈在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; }
    }

    // ...
}

在URL中,请注意我要筛选的类型的强制转换(使用完全限定的实体类型名称)。

我还注意到LightSwitch似乎不支持域模型中的继承,因此我不建议任何人在他们的模型中使用继承:如果您的客户机将是LightSwitch,这可能是真的。如果你的客户端是WCF数据服务,或者Data.js,或者ODataLib,或者简单的JavaScript,我认为你可以使用继承。为了在数据服务中使用继承,我必须升级到库的最新版本。我使用的是5.4版(NuGet)的客户端库,我可以确认继承确实适用于该版本。
http://localhost:59803/ScratchService.svc/Products/Scratch.Web.DiscountedProduct?$filter=Discount gt 10.0