2011-07-01 35 views
10

Bối cảnh:tài sản RIA/EF4 Entity ánh xạ tới KHÔNG nvarchar NULL - chuỗi rỗng

  • Entity Framework 4
  • dịch vụ Silverlight 4
  • RIA
  • MSSQL Server 2008

Tôi có một thực thể có một thuộc tính String có tên là Mô tả.

Trong cơ sở dữ liệu, nó ánh xạ tới NOT NULL NVARCHAR(200).

Vấn đề:

Khi tôi cố gắng để chèn một dòng mới của thực thể đó, đây là những gì tôi làm:

MyExampleEntity entity = new MyExampleEntity() 
{ 
    Name = "example", 
    Description = ""  // NOTE THIS LINE! 
}; 

DatabaseContext db = new DatabaseContext(); 
db.MyExampleEntities.Add(entity); 
db.SubmitChanges(); 

này, tuy nhiên, nguyên nhân một ngoại lệ nói "The Description field is required."

Câu hỏi:

Không được để trống chuỗi "đơn giản là - một chuỗi có 0 ký tự?

Tôi tin rằng chỉ Description = null nên được coi là cung cấp không có giá trị.

  • Tại sao chuỗi của tôi có giá trị (mặc dù chiều dài của nó bằng 0), được coi như thể tôi đã bỏ qua giá trị?
  • Chuyển đổi này xảy ra ở cấp độ nào? Trên RIA, về EF hoặc trong MSSQL?
  • Có cách nào để tạo mô tả có giá trị độ dài bằng không khi tôi đặt Description to "" và gây ra ngoại lệ khi Description = null (không có giá trị)?

Trả lời

9

Điều này dường như là một triệu chứng của khung Entity Framework.

Related Article

Một số chú thích dữ liệu có thể được sử dụng để khắc phục điều này:

[MetadataType(typeof(Report_META))] 
    public partial class Report 
    { 
    } 

    public partial class Report_META 
    { 
     [Required(AllowEmptyStrings = true)] 
     [DisplayFormat(ConvertEmptyStringToNull = false)] 
     public object Note { get; set; } 
    } 
+0

Nó hoạt động, cảm ơn. –

+1

Lưu ý rằng thuộc tính '[Bắt buộc]' có thể va chạm với các quy tắc FluentValidation nếu bạn đang sử dụng chúng, vì chúng cũng có thể thêm thuộc tính, và bạn chỉ có thể có một cá thể của thuộc tính tại một thời điểm ([http: // stackoverflow.com/a/5552237/1454265] (http://stackoverflow.com/a/5552237/1454265)). Tôi đã có thể vượt qua điều này và cho phép các chuỗi rỗng bằng cách bỏ thuộc tính '[Required]' từ lớp MetadataType và thêm một quy tắc có điều kiện vào việc xác thực: 'RuleFor (x => x.Field) .Etc (...) .Khi (x =>! String.IsNullOrWhitespace (x.Field); ' – user1454265

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