gpt4 book ai didi

c# - 无法将验证器添加到 EF 生成的元数据中

转载 作者:行者123 更新时间:2023-12-01 18:44:51 27 4
gpt4 key购买 nike

我在 Entity Framework 中有一个数据库,其中创建了一组 DTO,然后 Breeze 从客户端使用这些 DTO。

我们使用服务器上的 DataAnnotations 来验证来自 Breeze 的数据,我希望能够在客户端上复制这些验证器。由于 Breeze 已经实现了这些验证器,并且显然支持将验证器添加到元数据中,因此我想尝试扩展 Breeze 服务器项目。

我已经知道 EDMXWriter 仅支持一小部分 DataAnnotations。

基本上我的项目所做的就是将生成后所需的验证器添加到 Breeze 发送的 json 中。

这是“表格”的一部分,其标题属性上具有 StringLength 的 DataAnnotation(Breeze 支持)。

{  
"name":"Table",
"customannotation:ClrType":"...",
"key":{
"propertyRef":{
"name":"Id"
}
},
"property":[
{
"name":"Title",
"type":"Edm.String",
"fixedLength":"false",
"unicode":"true",
"validators":[
{
"validatorName":"stringLength",
"maxLength":"Max",
"minLength":1
}
]
}
]
}

我已经格式化了输出生成,以符合 Breeze 网站上的方案设置的要求:http://www.breezejs.com/documentation/metadata-schema

但是 Breeze 并没有解释我添加到元数据中的这些验证器。

我注意到 Breeze Server 为 EF 提供的架构与上面 Web 链接上设置的架构有不同的设计。 BreezeJS 不解释 EF 提供的元数据的验证器吗?如果是这种情况,是否有一种简单的方法可以启用此功能,或者我也必须将其写入客户端。

我知道 Breeze 团队确实说过他们计划实现更好的 EF DataAnnotation 支持,但我没有看到任何结果。也许这已经实现了,但我错过了一些东西? 人们只能希望事情会这么简单。

问候,奥利弗·贝克

最佳答案

Breeze 可以理解两种元数据格式。第一个是基于 EDM( Entity Framework )模型的默认设置,是 EDMX CSDL 的 json 序列化版本。这是一种不能轻易扩展的 MS 格式,并且仅支持上面列出的有限数量的数据注释。

另一种选择是 Breeze 的原生元数据格式。这种格式通常由任何基于非 Entity Framework 的 Breeze 服务器使用。这也是应用 MetadataStore.exportMetadata 和 MetadataStore.importMetadata 方法调用时使用的格式。如果您的服务器提供这种格式的元数据,那么您可以包含您想要的任何验证。研究这种格式的最佳方法是简单地导出当前应用程序的元数据并进行查看。结果只是字符串化的 native 元数据 json。

一些 Breeze 开发人员采用的一种方法是使用预构建过程,通过 Breeze 客户端从 EF 服务器往返 CSDL 格式的元数据,将其转换为 native 格式,然后简单地将结果存储在服务器上(在您的情况下为一些添加的验证器),并在元数据调用期间简单地将预存储的元数据返回到生产中的客户端。

此外,你还可以扩展breeze元数据格式:参见:

http://www.breezejs.com/documentation/custom-metadata

我们有许多开发人员将此类扩展元数据用于各种目的,包括添加验证元数据。

关于c# - 无法将验证器添加到 EF 生成的元数据中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26339736/

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