gpt4 book ai didi

odata - 如何在运行时为OData Web API建立EDM模型?

转载 作者:行者123 更新时间:2023-12-03 16:55:23 24 4
gpt4 key购买 nike

我有一种情况,我需要通过OData公开的实体是完全动态的(例如,用户可以配置他要公开的字段)。来自存储库的查询结果存储在特殊的通用类中,该类具有用于实际数据(FieldName/Value)的字典,因此CLR类型是所有类型的一种。我对实体有完整的了解(实体名称,实体字段及其类型)。

因此,我无法在设计时使用EntityTypeConfiguration的Entity,EntitySet或HasKey(),Property()之类的ODataModelBuilder方法来构建EDM模型。

是否可以从头开始构建EDM模型? ODataModelBuilder使用EntityTypeConfiguration,但它取决于CLR实体类型。基本上,我需要为所有实体声明几种具有一种CLR类型的实体类型。

请指教。

最佳答案

好的,所以我已经找到了解决该问题的方法。

我已经编写了自己的OData模型构建器,该构建器使用Microsoft.Data.Edm.Library命名空间中的类型(EdmModel,EdmEntityType等)。

例子:

public IEdmModel GetEdmModel()
{
EdmModel model = new EdmModel();

EdmEntityContainer container = new EdmEntityContainer(Namespace, "DefaultContainer");
model.AddElement(container);
model.SetIsDefaultEntityContainer(container, isDefaultContainer: true);

EdmEntityType edmType = new EdmEntityType(Namespace, "Foo");
EdmStructuralProperty idProp = edmType.AddStructuralProperty("Id", EdmCoreModel.Instance.GetPrimitiveType(EdmPrimitiveTypeKind.Int32), false);
edmType.AddKeys(idProp);

сontainer.AddEntitySet("MyEntitySet", edmType);

model.SetDataServiceVersion(new Version(3, 0, 0, 0));
model.SetMaxDataServiceVersion(new Version(3, 0, 0, 0));

return model;
}

关于odata - 如何在运行时为OData Web API建立EDM模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28200511/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com