如何设置字符串属性C#EF

时间:2016-03-01 05:47:21

标签: c# wpf string entity-framework properties

这是我模特的一部分

public class Sensor
{
    public int Id { get; set; }

    [Required]
    [MaxLength(40)]
    public string Name { get; set; }
}

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

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

例如,有:"运动检测器"。我希望这个词最多8个符号。这意味着运动和检测器需要少于8个符号长度。用户无法像#" MotionDetector"其长度为12个符号。

2 个答案:

答案 0 :(得分:4)

一种方法是你可以使用属性中的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 :(得分:3)

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

MVC中,MaxLength属性并非用于验证最大允许输入,StringLength是验证属性,如解释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

要在SensorSensorViewModel之间轻松传输数据,可以使用自动库。例如。 AutoMapper

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