2016-03-01 11 views
6

Dưới đây là một phần của mô hình của tôiLàm thế nào để thiết lập chiều dài tối đa của từ riêng biệt của chuỗi bất động sản C# EF

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

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

Tên là một số văn bản đệ trình người có chiều dài tối đa là 40 ký tự. Và trong trường văn bản này có thể có vài từ.

Câu hỏi của tôi là có thể đặt độ dài tối đa của từ trong thuộc tính Tên?

Ví dụ: "Trình dò ​​chuyển động". Và tôi muốn từ có tối đa 8 ký tự. Điều này có nghĩa là Motion và Detector cần phải có ít hơn 8 ký hiệu chiều dài. Người dùng không thể viết như "MotionDetector" có độ dài là 12 ký hiệu.

Trả lời

4

Một cách là bạn có thể sử dụng setter trong tài sản để kiểm soát độ dài tối đa cho mỗi từ:

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

Có một khung sai đằng sau độ dài :) Nó phải được đặt sau tám :) – Jannik

+0

@ Jannik bạn nói đúng! Tôi đã cập nhật nó rồi. Cảm ơn! – Ian

+0

Cảm ơn sự giúp đỡ – evelikov92

3

Tốt nhất, bạn nên có một sự tách biệt rõ ràng giữa các mô hình dữ liệu (tạo ra bởi EF) và xem mô hình (được sử dụng để ràng buộc). Vì vậy, bạn nên xác nhận hợp lệ dữ liệu người dùng dựa trên định nghĩa mô hình xem, chứ không phải định nghĩa mô hình dữ liệu.

Trong MVC, MaxLength thuộc tính không có nghĩa là để xác nhận tối đa đầu vào cho phép, StringLength là một thuộc tính xác nhận, như explanained here.

Trong trường hợp cụ thể của bạn:

// 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; } 
} 

Nếu MVC được sử dụng, SensorViewModel sẽ @model của bạn.

Để dễ dàng truyền dữ liệu giữa SensorSensorViewModel, bạn có thể sử dụng thư viện tự động hóa. Ví dụ. AutoMapper.

Nếu bạn không sử dụng MVC, có thay thế cho WPFWindows Forms. Một thời gian ngắn, bạn có thể tránh mã soạn sẵn của xác nhận đơn giản bằng cách sử dụng các thuộc tính.

Các vấn đề liên quan