2008-10-10 55 views
16

Tôi đang sẵn sàng để bắt đầu một dự án mới và tôi đã nghiên cứu khung thực thể. Câu hỏi của tôi là chiến lược tốt nhất để xác thực các thực thể là gì? Các dự án khác mà tôi đã làm việc trên đã sử dụng các thuộc tính cho hầu hết các xác nhận hợp lệ, nhưng rõ ràng điều này là không thể trong khung thực thể. Cách duy nhất để làm điều này bằng cách xử lý các phương thức một phần trong các bộ định vị thuộc tính? Mọi lời khuyên đều được đánh giá cao.Xác thực khung thực thể

Trả lời

11

Tôi chưa thực sự sử dụng khung Entity trước đây nhưng tìm kiếm nhanh cho biết bạn có một số tùy chọn.

1) Validate tại một lớp trong ứng dụng của bạn

Luôn luôn là một lựa chọn, tôi chỉ nghĩ rằng tôi sẽ ném nó ra khỏi đó một cách rõ ràng.

2) Hook vào các sự kiện onChanged của Entity sau đó thực hiện xác nhận

có khả năng giòn và sẽ trở thành khó hiểu/sau chậm nếu bạn có nhiều tài sản khác nhau những điều mà có thể thay đổi cho từng đối tượng.

3) Thực hiện phương pháp từng phần để xác nhận tài sản thay đổi

Theo this bưu chính this hương có những phương pháp từng phần có sẵn để xác nhận. Điều này có vẻ như lựa chọn tốt nhất của bạn vì nó không phải là rất xâm nhập và bạn có thể chọn lọc thực hiện xác nhận bạn muốn.

Tôi hy vọng điều đó sẽ hữu ích. Chúc may mắn.

+0

KháC# 2 và # 3 là gì? Các phương thức mà nó tạo ra là các sự kiện OnChanged ... trừ khi tôi bỏ sót một thứ gì đó. –

+0

Bạn có thể chính xác. Đã lâu rồi tôi chưa từng nhìn EF. – smaclell

+3

Tôi đọC# 2 và # 3 dưới dạng xác thực cấp thực thể và thuộc tính. Hai chiến lược này có các mục đích khác nhau, tất nhiên: xác thực cấp thực thể kiểm tra tính hợp lệ của tất cả các thuộc tính với nhau (ví dụ các thuộc tính loại trừ lẫn nhau không được thiết lập), trong khi xác nhận cấp thuộc tính chỉ xem xét nội dung của một thuộc tính duy nhất tại thời gian (ví dụ: địa chỉ email có dạng chính xác). Các liên kết – ladenedge

3

Nếu bạn sử dụng ASP.NET MVC, thì bạn có thể sử dụng Khối xác thực ứng dụng hoặc System.ComponentModel.DataAnnotations. Các bài viết Using Data AnnotationsUsing Application Block cho biết cách sử dụng chúng bằng LINQ, nhưng việc sử dụng với khung thực thể phải giống nhau.

+0

dường như đã lỗi thời? –

+0

liên kết cố định, bài chỉnh sửa - đó là ony áp dụng trong MVC. cảm ơn Jeff – Shimmy

6

Trong .NET 4, sẽ có hỗ trợ xác thực ngoài khung trong Entity-Framework.

Check-out: http://blogs.msdn.com/adonet/archive/2010/01/13/introducing-the-portable-extensible-metadata.aspx

Vì vậy, không làm việc để khó khăn về thực hiện logic xác nhận quá phức tạp ...

+0

Thật kỳ lạ, phần mở rộng PEM và các mẫu của nó là vì một số lý do, không còn có sẵn qua MSDN nữa. Tôi rất thích một liên kết được cập nhật nếu có ai đó! – ladenedge

+0

Tôi hy vọng họ không lừa chúng tôi ... Tôi đoán tôi đã sai khi nói out-the-box, bây giờ tôi nhận ra rằng nó chỉ là một addon. Nó nói rằng các addon có thể được tải về từ http://visualstudiogallery.msdn.microsoft.com/en-us/e6467914-d48d-4075-8885-ce5a0dcb744d nhưng hãy kiểm tra các liên kết để thấy rằng nó bị hỏng. – Shimmy

+0

Tôi thấy liên kết này trong các ý kiến ​​http://code.msdn.microsoft.com/DesignerExtStartKit/Wiki/View.aspx?title=Home&version=3, không có thời gian để kiểm tra được nêu ra. – Shimmy

2

This bài viết mô tả làm thế nào để tích hợp Validation Application Block với Entity Framework. Nó có thể là một số trợ giúp.

0

Nếu bạn đang sử dụng WPF hoặc Windows Forms thì bạn có thể triển khai giao diện IDataErrorInfo.

Các BookLibrary ứng dụng mẫu của dự án WPF Application Framework (WAF) cho thấy cách tổ chức tạo ra bởi khung Entity thể được xác nhận.

1

Chúng tôi đã overrident bối cảnh đối tượng và đánh chặn các SaveChanges() phương pháp

public abstract class ValidationObjectContext : ObjectContext{ 
    ... 

    public override int SaveChanges(SaveOptions options){ 
     ValidateEntities(); 
     return base.SaveChanges(options); 
    } 

} 

Bằng cách đó xác nhận còn lại cho đến phút cuối cùng trước khi kết nối được thực hiện nhưng sau khi bạn được (hy vọng) để được hạnh phúc với biểu đồ và sẵn sàng cam kết, (trái ngược với các tùy chọn khác để xác thực trên bất kỳ thay đổi nào, vì một số quy tắc phức tạp như những quy tắc chúng tôi có chỉ hợp lệ sau khi một số thuộc tính được đặt.).Chúng tôi có hai cấp độ xác nhận, xác nhận tài sản cơ bản, những thứ như độ dài chuỗi, nullability vv Và xác thực logic kinh doanh, có thể yêu cầu kiểm tra các quy tắc trên nhiều đối tượng, có thể nhấn cơ sở dữ liệu để xác nhận.

0

Xem xét việc triển khai IValidatableObject trong thực thể của bạn.

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