gpt4 book ai didi

breeze - Breeze 服务器端元数据是强制性的还是可以在客户端定义?

转载 作者:行者123 更新时间:2023-12-04 14:03:08 27 4
gpt4 key购买 nike

我正在考虑使用 Breeze js,并对其功能和随之而来的最佳实践有一些疑问。

  • 服务器端元数据是否必须存在?如果我有一个非 EF WebApi Controller ,我是否仍然需要用 ProviderContext 包装它并实现元数据?如果是,元数据的格式是什么?
  • 如果我能够省略服务器端的元数据并只实现可查询的 actionfilter,我是否仍然可以编写客户端代码来定义元数据?我在哪里可以找到有关如何执行此操作的信息?
  • 我有一个名为 Job 的服务器模型类,带有一个 id 和名称,它们是简单的属性和一个名为 Company 的对象属性,它指向一个名为 Company 的服务器端模型类,它具有一个 id 和名称。 Job(s) 可以是 secret 的(通过 Job 上的 bool IsConfidential 属性),在这种情况下,即使他们仍然有 companyId,也不应该将该属性发送给客户端。相反,应该有一个名为 CompanyName 的服务器端计算属性(对于非 secret 作业基本上是 Company.Name,对于 secret 作业基本上是 Company.Name)发送到客户端。管理员角色的用户应该能够查看和编辑 CompanyId,但普通用户不应该能够查看或发布/放置该值。你如何在 Breeze 中做到这一点? Breeze 是否能很好地处理发送和接收非模型 View 模型(较少的属性和一些计算属性)?
  • ODataActionFilter 源代码的源代码是否可以用于任何我想要的用途和更改?
  • 为 EF 以外的东西创建 WebApi Controller 有多困难 - 也许像 Telerik OpenAccess?

  • 谢谢

    最佳答案

    Pawel 的帖子是正确的,您应该首先调用

    Breeze .config.initializeAdapterInstances

    要实际创建客户端元数据,您将编写如下内容。 (一个简单的例子)。

    initializeMetadataStore(myEntityManager.metadataStore);

    function initializeMetadataStore(metadataStore) {
    var et = new EntityType({
    shortName: "Person",
    namespace: "Sample_WebApi.Models"
    });
    et.addProperty( new DataProperty({
    name: "personId",
    dataType: DataType.Int32,
    isNullable: false,
    isPartOfKey: true,
    }));
    et.addProperty(new DataProperty({
    name: "firstName",
    dataType: DataType.String,
    isNullable: false,
    }));
    et.addProperty(new DataProperty({
    name: "lastName",
    dataType: DataType.String,
    isNullable: false,
    }));
    et.addProperty(new DataProperty({
    name: "birthDate",
    dataType: DataType.DateTime,
    isNullable: true
    }));
    et.addProperty(new NavigationProperty({
    name: "meals",
    entityTypeName: "Meal",
    isScalar: false,
    associationName: "personMeals"
    }));
    metadataStore.addEntityType(et);

    et = new EntityType({
    shortName: "Meal",
    namespace: "Sample_WebApi.Models"
    });
    et.addProperty(new DataProperty({
    name: "mealId",
    dataType: DataType.Int32,
    isNullable: false,
    isPartOfKey: true,
    }));
    et.addProperty(new DataProperty({
    name: "personId",
    dataType: DataType.Int32,
    isNullable: false,
    }));
    et.addProperty(new DataProperty({
    name: "dateConsumed",
    dataType: DataType.DateTime,
    isNullable: false,
    }));
    et.addProperty(new NavigationProperty({
    name: "person",
    entityTypeName: "Person",
    isScalar: true,
    associationName: "personMeals",
    foreignKeyNames: ["personId"]
    }));
    et.addProperty(new NavigationProperty({
    name: "dishes",
    entityTypeName: "Dish",
    isScalar: false,
    associationName: "mealDishes",
    }));
    metadataStore.addEntityType(et);

    et = new EntityType({
    shortName: "Dish",
    namespace: "Sample_WebApi.Models"
    });
    et.addProperty(new DataProperty({
    name: "dishId",
    dataType: DataType.Int32,
    isNullable: false,
    isPartOfKey: true,
    }));
    et.addProperty(new DataProperty({
    name: "foodName",
    dataType: DataType.String,
    isNullable: false,
    }));
    et.addProperty(new DataProperty({
    name: "servingSize",
    dataType: DataType.Double,
    isNullable: false,
    }));
    et.addProperty(new NavigationProperty({
    name: "food",
    entityTypeName: "Food",
    isScalar: true,
    associationName: "DishFood",
    foreignKeyNames: ["foodName"]
    }));
    metadataStore.addEntityType(et);

    et = new EntityType({
    shortName: "Food",
    namespace: "Sample_WebApi.Models"
    });
    et.addProperty(new DataProperty({
    name: "foodName",
    dataType: DataType.String,
    isNullable: false,
    isPartOfKey: true,
    }));
    et.addProperty(new DataProperty({
    name: "calories",
    dataType: DataType.Int32,
    isNullable: false,
    }));
    metadataStore.addEntityType(et);
    }

    关于breeze - Breeze 服务器端元数据是强制性的还是可以在客户端定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13607714/

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