2014-10-10 15 views
5

Xin chào Tôi đang sử dụng Khuôn khổ thực thể 6.1.1 hỗ trợ tính năng chú thích dữ liệu chỉ mục trong đó. Tôi có một trường được xác định trong lớp thực thể của tôi là:Thông báo lỗi cho chú thích dữ liệu chỉ mục trong EF

[Index("scoreIndex", IsUnique=true)] 
    public int score{ get; set; } 

Điều này hoạt động tốt. Tuy nhiên, tôi đang cố gắng tìm ra cách hiển thị thông báo khi điểm số không phải là duy nhất. Ngay bây giờ nó chỉ ném một ngoại lệ. Tôi đã thử như sau

[Index("scoreIndex", IsUnique=true, ErrorMessage="Score must be unique")] 

Nhưng nó không chứa định nghĩa cho ErrorMessage cho lớp chú thích chỉ mục này. Bạn có thể cho tôi biết cách xử lý thông báo ngoại lệ để nó xử lý nó một cách duyên dáng không?

+0

Thuộc tính chỉ cho EF biết để tạo chỉ mục khi di chuyển được chạy, nó không khiến EF thực thi chỉ mục. Bạn sẽ phải xử lý các ngoại lệ trong mã của bạn. Ngoài ra, bạn có thể viết chú thích dữ liệu tùy chỉnh thực sự xác thực thuộc tính cho tính duy nhất. –

Trả lời

2

IndexAttribute không phải là thuộc tính xác thực và đó là lý do tại sao nó không có thuộc tính ErrorMessage và cũng không có phương thức IsValid() được sử dụng để xác thực nó dựa trên một loạt các giá trị hợp lệ.

Điều đó có nghĩa là nó không được thiết kế để được xác nhận như các thuộc tính xác nhận điển hình (Bắt buộc, MaxLength, v.v.). Thuộc tính IsUnique chỉ được sử dụng trong khi tạo bảng để tạo chỉ mục duy nhất.

Nếu bạn muốn sử dụng thuộc tính, thì bạn nên tạo thuộc tính tùy chỉnh để kiểm tra tính duy nhất của Chỉ mục. Tất nhiên chỉ mục đó sẽ kế thừa lớp ValidationAttribute và sẽ phải truy cập vào EF DbContext bên trong để kiểm tra tính duy nhất trong mã xác nhận thuộc tính.

Nếu bạn không thích phương pháp chú thích dữ liệu này và quá phức tạp, thì bạn có thể xử lý phương thức SaveChanges() trong một khối try-catch, giải mã thông báo lỗi và trả lại nội dung thân thiện chế độ xem của bạn.

try 
{ 
    using (var ac = new ApplicationDbContext()) 
    { 
     // Add non-unique data 

     ac.SaveChanges(); 
    } 
} 
catch (DbUpdateException ex) 
{ 
    // Handle index error 
} 
Các vấn đề liên quan