如何设置字符串属性 C# EF 的分隔字的最大长度

本文关键字:分隔 EF 何设置 设置 属性 字符串 | 更新日期: 2023-09-27 18:36:45

这是我模型的一部分

public class Sensor
{
    public int Id { get; set; }
    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
}

名称是一些文本,最大长度为 40 个符号。在这个文本字段中可以有很少的单词。

我的问题是是否可以在 Name 属性中设置单词的最大长度?

例如有:"运动检测器"。我希望这个词最多有 8 个符号。这意味着运动和检测器的长度需要小于 8 个符号。用户不能像长度为 12 个符号的"运动检测器"那样书写。

如何设置字符串属性 C# EF 的分隔字的最大长度

一种方法是可以使用属性中的setter来控制每个单词的最大长度:

set {
  string[] words = value.Split(' ')
  if (words.Any(x => x.Length > 8)){
      //error, do something
  } else { //OK, pass
      Name = value; //only update Name if the length for all words are valid
  }
}

理想情况下,数据模型(由 EF 生成)和视图模型(用于绑定)之间应有明确的分离。因此,您应该根据视图模型定义而不是数据模型定义来验证用户数据。

MVC中,MaxLength属性并不意味着验证最大允许输入,StringLength是一个验证属性,如此处所述。

在您的特定情况下:

// this is the data model
public class Sensor
{
    public int Id { get; set; }
    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
}
// this is the data model
public class SensorViewModel
{
    public int Id { get; set; }
    [Required]
    [StringLength(8)]
    public string Name { get; set; }
}

如果使用MVCSensorViewModel将是您的@model

为了在SensorSensorViewModel之间轻松传输数据,可以使用自动映射库。 例如自动映射器。

如果不使用 MVC ,则有 WPF 和 Windows 窗体的替代方法。简而言之,您可以使用属性来避免简单验证的样板代码。