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

t31*_*316 6 breeze

我正在寻找使用breezejs,并就其功能和随附的最佳实践提出一些问题.

  1. 服务器端metada必须存在吗?如果我有一个非EF WebApi控制器,我还需要用ProviderContext包装它并实现元数据吗?如果是这样,元数据的格式是什么?
  2. 如果我能够在服务器端省略元数据并且只实现可查询的actionfilter,我还可以编写客户端代码来定义元数据吗?我在哪里可以找到有关如何执行此操作的信息?
  3. 我有一个名为Job的服务器Model类,它带有id和name,它们是简单的属性和一个名为Company的对象属性,它指向一个名为Company的服务器端模型类,它具有id和name.作业可以是机密的(通过Job上的布尔IsConfidential属性),在这种情况下即使它们仍然有一个companyId,该属性也不应该发送给客户端.相反,应该有一个名为CompanyName的服务器端计算属性(基本上是非机密作业的Company.Name和机密作业的"机密")发送给客户端.管理员用户应该能够查看和编辑CompanyId,但普通用户不应该看到或发布/放置该值.你如何在微风中实现这一目标?breeze是否能很好地处理非模型ViewModel(较少的属性和一些计算属性)?
  4. ODataActionFilter源代码的来源是什么我可以使用并改变我想要的任何目的?
  5. 为EF以外的东西创建WebApi控制器有多难 - 可能就像Telerik OpenAccess一样?

谢谢

Jay*_*and 6

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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我很想在Breeze示例网站上看到一个示例,它展示了如何使用"任何"http网络服务连接Breeze. (2认同)