如何设置字符串属性C#EF的分离字的最大长度
问题描述:
这里是我的模型的一部分如何设置字符串属性C#EF的分离字的最大长度
public class Sensor
{
public int Id { get; set; }
[Required]
[MaxLength(40)]
public string Name { get; set; }
}
名称是一些文本提交谁是有40个码元的最大长度。而在这个文本领域可能会有几句话。
我的问题是可以在Name属性中设置单词的最大长度吗?
例如有:“运动检测器”。我希望这个词最多是8个符号。这意味着运动和检测器需要少于8个符号长度。用户不能像“MotionDetector”那样长度为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
是验证属性,如explanained here。
你的具体情况:
// 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
之间传输数据,可以使用自动映射库。例如。 AutoMapper。
如果您不使用MVC
,还有WPF和Windows Forms的替代选项。简而言之,您可以通过使用属性来避免简单验证的样板代码。
长度后面有一个错误的支架:)它必须定位在八个之后:) – Jannik
@Jannik你是对的!我已经更新了它。谢谢! – Ian
感谢您的帮助 – evelikov92