如何设置字符串属性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 
    } 
} 
+1

长度后面有一个错误的支架:)它必须定位在八个之后:) – Jannik

+0

@Jannik你是对的!我已经更新了它。谢谢! – Ian

+0

感谢您的帮助 – evelikov92

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

MVCMaxLength属性并不意味着验证最大允许输入,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; } 
} 

如果使用MVCSensorViewModel将是你@model

为了方便地在SensorSensorViewModel之间传输数据,可以使用自动映射库。例如。 AutoMapper

如果您不使用MVC,还有WPFWindows Forms的替代选项。简而言之,您可以通过使用属性来避免简单验证的样板代码。