Vla*_*nko 7 odata asp.net-web-api asp.net-web-api2
我有一个案例,我需要通过OData公开的实体是完全动态的(例如,用户可以配置他想要公开的字段).来自存储库的查询结果存储在具有实际数据字典(FieldName/Value)的特殊泛型类中,因此CLR类型适用于所有类型.我对实体(实体名称,实体字段及其类型)有完整的了解.
因此,我无法使用Entity,EntitySet或HasKey(),EntityTypeConfiguration中的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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2196 次 |
| 最近记录: |