2012-03-19 37 views
8

Khi xác định một chuỗi trong một lớp bằng cách sử dụng Code First, mặc định cho các cột trong cơ sở dữ liệu được tạo cho phép null.Nullability cho chuỗi vs các kiểu dữ liệu khác trong cột được tạo bởi Entity Framework Code Đầu tiên

public string MyString { get; set; } 

tạo cột này:

MyString (nvarchar (max), null)

tôi có thể thay đổi điều này để "không null" bằng cách sử dụng các thuộc tính [Required] hoặc bằng .IsRequired() trong API thông thạo.

Giá trị mặc định cho các loại dữ liệu khác không cho phép giá trị rỗng.

public int MyInt { get; set; } 
    public DateTime MyDateTime { get; set; } 
    public float MyFloat { get; set; } 
    public decimal MyDecimal { get; set; } 
    public bool MyBool { get; set; } 

tạo ra các cột:

Myint (int, không null)

MyDateTime (datetime, không null)

MyFloat (thực tế, không null)

MyDecimal (thập phân (18,2), không phải là null)

MyBool (bit, không null)

tôi có thể thay đổi các cho phép null bằng cách sử dụng phương pháp .IsOptional() trong API thạo . Có một thuộc tính sẽ làm điều tương tự?

Tôi cũng có thể thay đổi kiểu dữ liệu trong định nghĩa lớp để cho phép null (int ?, DateTime ?, v.v.) dẫn đến cột cho phép null trong cơ sở dữ liệu.

Lý do để cho phép null theo mặc định cho chuỗi chứ không phải cho các loại dữ liệu khác là gì?

Trả lời

5

Bạn đã tự trả lời câu hỏi này. Bạn không thể có tham chiếu null đối với bất kỳ loại dữ liệu nào khác mà bạn đã liệt kê. Vì vậy, nếu mã không thể xử lý một null, thì nó sẽ đảm bảo rằng cơ sở dữ liệu cũng thi hành điều đó.

Chỉ cần làm điều này hoàn toàn rõ ràng, vì bạn đang tập trung cụ thể vào chuỗi so với các loại giá trị khác. Here is the MDSN article on strings, nếu bạn tìm kiếm null, bạn sẽ thấy dòng này:

Ngược lại, một chuỗi rỗng không tham chiếu đến một thể hiện của một đối tượng System.String và bất kỳ nỗ lực nào gọi phương thức trên một kết quả chuỗi rỗng trong một NullReferenceException

Tuy nhiên, trừ khi int là rỗng, nó sẽ không bao giờ ném NullReferenceException vì nó luôn phải có giá trị mặc định.

1

Có ích khi thêm rằng không chỉ các chuỗi có thể vô hiệu trong Mã EF Thứ nhất, mà còn cả các lớp.

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