如何设置字符串属性 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 个符号的"运动检测器"那样书写。
一种方法是可以使用属性中的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; }
}
如果使用MVC
,SensorViewModel
将是您的@model
。
为了在Sensor
和SensorViewModel
之间轻松传输数据,可以使用自动映射库。 例如自动映射器。
如果不使用 MVC
,则有 WPF 和 Windows 窗体的替代方法。简而言之,您可以使用属性来避免简单验证的样板代码。