2016-03-01 5 views
6

Вот часть моей моделиКак установить максимальную длину отделенного слова струнного свойство C# EF

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

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

Имя некоторого текст подается, который имеет максимальную длину 40 символов. И в этом текстовом поле возможно иметь несколько слов.

Вопрос в том, можно ли установить максимальную длину слова в свойстве Name?

Для примера: «Детектор движения». И я хочу, чтобы слово было максимально 8 символов. Это означает, что движение и детектор должны быть меньше 8 символов. Пользователь не может писать как «MotionDetector», длина которого составляет 12 символов.

ответ

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

Существует неправильная скобка за длиной :) Она должна быть расположена после восьми :) – Jannik

+0

@Jannik вы правы! Я уже обновил его. Благодаря! – Ian

+0

Спасибо за помощь – evelikov92

3

В идеале, вы должны иметь четкое разделение между моделями данных (генерируемый 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. Вкратце, вы можете избежать кода шаблона простой проверки с помощью атрибутов.

Смежные вопросы