首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Odata解析$metadata

Odata解析$metadata
EN

Stack Overflow用户
提问于 2015-05-29 15:45:33
回答 2查看 833关注 0票数 1

我托管一个OData服务,它从我的数据库中公开某些表和属性。

我可以使用hosturl$元数据属性为DB请求元数据。返回XML格式的表名和列。

我想知道是否有一个内置的OData类来解析这个类,这样我就可以获取表和列,还是必须手动完成?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 15:04:43

因此,我想出了一个方法,您还需要@Vagif的帖子中的这个类,您可以在这里找到:

http://odata.jenspinney.com/2013/02/creating-an-iedmmodel-from-a-metadata-document/

这是一个获取属性的简单函数,可以对其进行优化以缓存表名等,但更多的是为了测试目的。

代码语言:javascript
复制
    private static IEdmModel GetODataEdmModel()
    {
        IEdmModel edmModel = null;
        string FullUrl = "http://localhost:4684/BDBWcfService.svc/$metadata/";


        var request = WebRequest.CreateHttp(FullUrl);
        var metadataMessage =
            new ClientHttpResponseMessage((HttpWebResponse)request.GetResponse());
        using (var messageReader = new ODataMessageReader(metadataMessage))
        {
            edmModel = messageReader.ReadMetadataDocument();
        }
        return edmModel;
    }

    public ActionResult ODataGetProperties(string TableName)
    {
        DataModel = (DataModel == null) ? GetODataEdmModel() : DataModel;

        //gets a mapping of the tables names
        var TableNames = DataModel.SchemaElements.OfType<IEdmEntityContainer>().Single().Elements.OfType<IEdmEntitySet>().ToDictionary(k => k.Name, v => v.ElementType.Name);

        string TypeName = string.Empty;
        if (TableNames.TryGetValue(TableName, out TypeName))
        {
            //uses the type name to look up the properties
            var data = DataModel.SchemaElements.OfType<IEdmEntityType>().Where(k => k.Name == TypeName).Select(v => new
            {
                NavigationProperties = v.NavigationProperties().Select(p => p.Name).ToList(),
                Properties = v.Properties().Select(p => p.Name).ToList(),
            }).FirstOrDefault();

            var JSSerializer = new JavaScriptSerializer();
            var json = JSSerializer.Serialize(data);
            return Json(data, JsonRequestBehavior.AllowGet);

        }
        return new HttpStatusCodeResult(HttpStatusCode.NotFound, "The Requested Table was not found please refine your query");
    }
票数 1
EN

Stack Overflow用户

发布于 2015-06-01 10:41:42

您可以使用ODataLib解析元数据模型,如下所述:

http://odata.jenspinney.com/2013/02/creating-an-iedmmodel-from-a-metadata-document/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30533793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档