2013-09-02 35 views
12

Tôi đang sử dụng mã EF đầu tiên cho dự án của mình. Tôi có mã sau đây trong DataModelMã khuôn khổ thực thể đầu tiên tạo cột không thể rỗng

[HiddenInput(DisplayValue = false)]   
public DateTime? PasswordDate { get; set; } 

Để làm cho giá trị này không bị vô hiệu, tôi đã xóa '?' và chạy lệnh Add-Migration từ giao diện điều khiển Package manager. tệp di chuyển sau đã được tạo.

public partial class PasswordDate : DbMigration 
{ 
    public override void Up() 
    { 
     AlterColumn("dbo.CertificateInfoes", "PasswordDate", c => c.DateTime(nullable: false)); 
    } 

    public override void Down() 
    { 
     AlterColumn("dbo.CertificateInfoes", "PasswordDate", c => c.DateTime()); 
    } 
} 

Nhưng khi tôi chạy lệnh Update-Cơ sở dữ liệu:

Update-Database -SourceMigration 201309020721215_PasswordDate 

tôi nhận được lỗi sau: Không thể chèn các giá trị NULL vào cột 'PasswordDate', bảng ''; cột không cho phép null. CẬP NHẬT không thành công. Tuyên bố đã bị chấm dứt.

Vui lòng đề xuất giải pháp.

Trả lời

10

Đó là vì bạn đã cho phép NULL giá trị trong cột đó, sau đó cố gắng làm cho nó không thể vô hiệu. Sau đó nó sẽ cố gắng di chuyển dữ liệu hiện có của bạn vào cột mới không có giá trị, sẽ phá vỡ vì bạn đã có giá trị NULL trong đó.

Hai giải pháp:

1) Thay đổi nó trở lại nullable
2) Cung cấp cho nó một giá trị mặc định cho các hạng mục mà không có một giá trị.

+0

Tôi không thể thay đổi lại thành không thể thực hiện được. cho tùy chọn thứ hai làm thế nào tôi có thể xác định giá trị mặc định? Tôi có cần phải làm điều đó trong tập tin di chuyển hoặc tôi cần phải thêm rằng trong datamodel của tôi? – HBhatia

+0

@HardikBhatia Sau đó cung cấp cho cột của bạn một giá trị ngày mặc định, nếu không bạn sẽ phải đi qua các bản ghi trống riêng lẻ và cập nhật chúng. – mattytommo

+1

Tôi đã sửa đổi bảng và đảm bảo cột PasswordDate của tôi không rỗng trong cơ sở dữ liệu. – HBhatia

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