我正在寻找使用breezejs,并就其功能和随附的最佳实践提出一些问题。
由于
答案 0 :(得分: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);
}
答案 1 :(得分:2)
1您可以在客户端上配置元数据。要关闭服务器元数据,请尝试以下操作:
config.initializeAdapterInstances(
new DataService({
serviceName: "yourServiceNameHere",
hasServerMetadata: false }));
2请查看Breeze docs和api。从这里开始EntityType和Extending Entities
答案 2 :(得分:2)
每个问题3:有几种可能的方法。
首先,您可以将不是“实体”的对象返回给客户端,这些对象几乎可以是任何形状。因此,您可以确定要包含或排除的属性。基本上,从服务器返回的任何无法找到匹配的客户端元数据的对象将作为anon json对象返回。请注意,这些anon对象不会被任何绑定库包装,即ko,backbone,angular等,并且这些对象不会被添加到entityManager缓存中。
第二种方法是使用json.net序列化拦截点。 (见json.net help)。这将允许您有条件地禁止所选属性的序列化。请注意这一点,因为如果您尝试重新保存已经“清理”后已返回到客户端的任何实体,则需要在完成保存之前将这些属性恢复为其原始值(在服务器上)。
每个问题4:breeze是开源的,可以在github上找到。您可以自由使用来源。
每个问题5:在最新版本的breeze.webApi.dll中,我们已经从我们的基本webApi功能重构了我们的EF特定代码,正是出于此目的。我们尚未完成对此文档的记录,但您可以查看Breeze.webApi项目中的“ContextProvider”和“EFContextProvider”类,以了解其他提供程序的外观。我们计划在不久的将来某个时候为mongodb展示一个NoSQL提供商。有关此领域的任何具体建议,请在breeze user voice上投票。