2010-06-27 24 views
14

Tôi đang cố gắng xác thực phía máy chủ của Thuộc tính chuỗi khung thực thể để hoạt động. Xác thực phía máy chủ khác chẳng hạn như xác thực kiểu dữ liệu và ngày giờ yêu cầu và các thuộc tính EF số đang hoạt động.Xác thực phía máy chủ của thuộc tính chuỗi được yêu cầu trong MVC2 Entity Framework 4 không hoạt động

Điều này trong VS 2010, .Net 4.0, MVC2 + Cloud, ADO.Net Entity Framework.

Thuộc tính chuỗi Tôi đang gặp sự cố với ánh xạ tới cột SQL 2008, Varchar (50) không có giá trị.

Khi tôi cố gắng đăng lên tác vụ Tạo của tôi bằng chuỗi trống cho Thuộc tính này, tôi nhận được lỗi follwing.

Chi tiết ngoại lệ: System.Data.ConstraintException: Thuộc tính này không thể được đặt thành giá trị rỗng.

Khi tôi đăng lên hành động với khoảng trắng, tôi nhận được thông báo xác thực trường bắt buộc thành công.

Tôi đã thử sử dụng Chú thích dữ liệu và ClientSideValidation nhưng có vẻ như có vấn đề với ClientSideValidation hoạt động trên một phần lượt xem và hộp thoại jquery.

Đây là mã được tạo tự động ban đầu từ khung thực thể.

[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)] 
[DataMemberAttribute()] 
public global::System.String GradeTypeName 
{ 
    get 
    { 
     return GradeTypeName; 
    } 
    set 
    { 
     OnGradeTypeNameChanging(value); 
     ReportPropertyChanging("GradeTypeName"); 
     _GradeTypeName = StructuralObject.SetValidValue(value, false); 
     ReportPropertyChanged("GradeTypeName"); 
     OnGradeTypeNameChanged(); 
    } 
} 

Tùy thuộc vào chữ ký của phương thức Action (CREATE hoặc EDIT), ngoại lệ có thể xảy ra trước khi bước vào phương thức hoặc trong phương thức khi UpdateModel() được gọi. Ngoại lệ bên trong là ở dòng bên dưới từ tệp model.designer.cs.

_GradeTypeName = StructuralObject.SetValidValue(value, false); 

Tôi đã có thể tái tạo điều này trên ứng dụng web mvc2 đơn giản.

Trả lời

28

tôi đã gặp sự cố tương tự trong một thời gian. Tôi đã tìm thấy một lời giải thích ở đây: http://mvcmusicstore.codeplex.com/workitem/6604. Để nói tóm lại, ngoại lệ "System.Data.ConstraintException: Thuộc tính này không thể được đặt thành giá trị rỗng" được xác thực bởi Xác thực thuộc tính của Entity. Việc xác thực này được thực hiện khi ứng dụng mvc của bạn cố gắng liên kết trường biểu mẫu với thuộc tính thực thể tương ứng (được gọi là Xác thực trước và xảy ra khi gửi biểu mẫu). Khi trường trống (do đó chuyển đổi thành null), trình kết dính cố gắng liên kết một giá trị null với thuộc tính, vi phạm ràng buộc Non-Null trên thuộc tính của thực thể của bạn.

Nhưng nếu bạn đăng với một trường trống (khác với rỗng, do đó null) Xác thực thực thể chuyển (vì thuộc tính không được đặt thành giá trị null nữa), và sau đó bạn thấy thông báo từ "Bắt buộc" xác nhận chú thích, được thực hiện sau khi gắn trước (đó là Xác nhận PostBinding).

Giải pháp thay thế là sử dụng chú thích [DisplayFormat (ConvertEmptyStringToNull = false)] để cho trình kết nối không chuyển đổi chuỗi rỗng thành rỗng.

[Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public string YourStringProperty { get; set;} 

Hy vọng điều này sẽ hữu ích!

+0

Cảm ơn! Đây là một vấn đề đối với tôi cho đến khi tôi tìm thấy bài đăng của bạn. – jrob

+0

Không, gặp vấn đề! Tôi rất vui vì điều này đã giúp! – tinesoft

+0

+1 cho trả lời rất tốt (liên kết, lời khuyên chưng cất) –

4

Điều này rất hữu ích. Tôi đang sử dụng MVC3 và khung thực thể.Tôi đã vượt qua các thực thể của tôi trực tiếp vào bộ điều khiển, nhưng có cùng một lỗi khi biểu mẫu trống. Với khung thực thể, bạn có thể thực hiện xác thực dữ liệu bằng cách chỉnh sửa mã được tạo tự động, nhưng việc tạo một lớp riêng biệt của thực thể đã làm việc tốt hơn cho tôi.

[MetadataType(typeof(TestEntityValidation))] 
public partial class TestEntity{ 
} 

public class TestEntityValidation{ 
    [Required] 
    [DisplayFormat(ConvertEmptyStringToNull = false)] 
    public String name { get;set} 
} 
2

Đôi khi trong cách tiếp cận đầu tiên cơ sở dữ liệu trong EF, bạn có thể cập nhật cột của bạn từ not null để có thể null sử dụng truy vấn SQL và sử dụng 'Cập nhật mô hình từ cơ sở dữ liệu ...' (trong EDMX click chuột phải) thì có lẽ tài sản của thực thể đó không được cập nhật đúng và vì vậy nếu bạn có một số dữ liệu null trong cột đó, trong ánh xạ, vi phạm xảy ra và lỗi này được hiển thị.

Để sửa lỗi này; Bạn có thể kiểm tra số Nullable trong Thuộc tính của thuộc tính đó của thực thể mà bạn đã cập nhật.

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