gpt4 book ai didi

c# - 如何获取服务器端字段的字符串长度?

转载 作者:行者123 更新时间:2023-11-30 12:33:31 25 4
gpt4 key购买 nike

我有一个从数据库创建的 edmx 模型和它的 metadata.cs。

在客户端中,.g.cs 包括 [StringLength(X)] 属性以及我的元数据中的属性。

我正在为独立于这些实体的客户端编辑器的平面文件导入做一些服务器端验证。

我能够应用我的范围和正则表达式验证,但我无法在服务器上找到 StringLength 属性。有谁知道如何在不在元数据属性上手动复制 StringLength 属性的情况下执行此操作。

编辑:

这是一些代码:

服务器端文件 ProductService.metadata.cs:

internal sealed class PRODUCTMetadata
{
[Required]
[RegularExpression("[A-Z]+")]
[Display(Name = "Product Code", Order = 10)]
public string Product_code { get; set; }
}

客户端Generated_Code\NameSpace.Web.g.cs:

public sealed class PRODUCT
{
[DataMember()]
[Display(Name="Product Code", Order=10)]
[RegularExpression("[A-Z]+")]
[Required()]
[StringLength(8)] //This is what I want to know, but server side
public string Product_code
{...etc
}
}

最佳答案

我已经围绕这个问题进行了一些调查,但在 Internet 上找不到关于该主题的任何有用信息。所以我在这里要说的只是假设

如您所见,与服务器端代码相比,自动生成的客户端代理代码用属性装饰得更多。例如,您的实体具有来自实体模型的漂亮的 [StringLength(8)] 属性。在服务器端,自动生成的 .metadata.cs 文件在实体上没有这些属性。 我认为一切都与代码生成模板有关

我怀疑 RIA 服务的代码生成模板(创建 .g.cs 文件)比创建 .metadata.cs 的模板更完整> 服务器端的文件。

您的案例中缺少的属性有 95% 的时间用于客户端的 UI 验证这一事实可能解释了为什么 .metadata.cs 文件的模板不生成那些验证属性。

我看到有 2 种解决方法可以解决您的问题:

<强>1。在服务器端编写您自己的元数据类

一些例子:

[MetadataTypeAttribute(typeof(PRODUCT.PRODUCTMetadata))]
public partial class PRODUCT
{
internal sealed class PRODUCTMetadata
{
// Metadata classes are not meant to be instantiated.
private PRODUCTMetadata()
{
}

[StringLength(8)]
public string Product_code { get; set; }
}
}

您可以手动将任何属性添加到实体的属性中,因为实体是分部类。

不幸的是,每次修改模型时都必须维护这些元数据:如果(例如)您的数据库表列从 varchar(8) 更改为 varchar(10 ),您将能够从数据库自动更新 EDMX 模型,但您必须手动检查元数据是否仍然正常(在此示例中,您必须手动替换 [ StringLength(8)] 通过 [StringLength(9)]).

这是一个 nice link关于元数据。

<强>2。修改T4模板

第二种方案可能是最好的,但是代码生成模板的修改我没有亲 body 验过,所以我不知道能有效地做什么。

代码生成模板称为 T4 模板 (Text Template Transformation Toolkit)。可以修改这些模板以在代码生成过程中包含您想要的任何内容。您可以修改默认的 EF 模板,使其像 RIA 服务模板一样生成缺少的属性。

这里有一些关于 T4 代码生成的好文章:


我把它写成一个答案(它不适合作为评论),但请记住这都是假设

关于c# - 如何获取服务器端字段的字符串长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9177846/

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