2009-07-13 36 views
22

Khi sử dụng LINQ to SQL, thêm cột vào bảng hiện có và đặt giá trị mặc định trên cột mới đó, có vẻ như LINQ to SQL bỏ qua giá trị mặc định. Có ai khác trải qua hành vi này không? Có cách nào để sửa chữa nó, để Linq-to-SQL hoặc SQL Server tự động đặt giá trị mặc định?Linq-to-SQL bỏ qua giá trị mặc định của SQL Server

Cột tôi đã thêm là loại bit, với giá trị mặc định được đặt thành 1.

+1

Trùng lặp: http://stackoverflow.com/q/201706/11683 (không bỏ phiếu để đóng, cả hai đều hữu ích như nhau). – GSerg

Trả lời

11

Bây giờ tôi đã sửa lỗi này bằng cách sử dụng ví dụ từ this blog.

partial void OnCreated() { 
    if (this.DateTimeCreated == null) { 
      this.DateTimeCreated = DateTime.Now; 
    } 
} 

Tôi cần chuyển nó vào một lớp dữ liệu một phần, vì lớp mặc định được tự động ghi đè mỗi khi bạn thay đổi thứ gì đó trong dbml.

+0

Giải pháp của tôi có khắc phục được sự cố không? –

+1

giải pháp của bạn hoạt động khi chèn, nhưng khi tôi cập nhật bản ghi, tôi nhận được lỗi về một số thành viên được tạo trong cơ sở dữ liệu không thể thay đổi – jao

+1

Bạn đã thử đặt Tự động đồng bộ thành "Luôn luôn" chưa? –

4

Tôi đã thấy điều này. Những gì bạn có thể làm là vào nhà thiết kế l2sql, xem các thuộc tính cho cột bảng có giá trị mặc định. Có thuộc tính "Giá trị được tạo tự động", đặt giá trị đó thành true.

Giá trị tương tự này được đặt thành đúng tự động cho cột nhận dạng tự động, như trong trường hợp đó SQL Server đang tạo ID hàng của bạn.

+1

Thao tác này không hoạt động, vì tôi cần cập nhật cột sau đó. Khi tôi thử giải pháp của bạn tôi nhận được một lỗi: "Một thành viên được tính toán hoặc tạo ra trong cơ sở dữ liệu không thể thay đổi" – jao

+0

Thats quá xấu. Tôi không bao giờ thử nó với một lĩnh vực tôi muốn thay đổi sau này (tôi đã sử dụng nó cho một cột DateCreated). Ngay cả trong trường hợp đó, tôi quyết định không sử dụng giá trị mặc định SQL và đặt nó một cách rõ ràng trong mã của tôi - lý do là một phần của logic miền của tôi nên nó thuộc về phần còn lại của mã logic miền của tôi. –

+0

Tôi nghĩ rằng lỗi tôi nhận được là một lỗi trong LINQ-to-sql. Chú giải công cụ 'giá trị được tạo tự động' cho biết "Giá trị được tạo tự động khi chèn" – jao

7

Đi vào trình thiết kế và chọn giá trị "Tự động đồng bộ hóa" của "OnInsert". Điều này sẽ đồng bộ hóa giá trị khi bản ghi được chèn vào cơ sở dữ liệu.

+0

Xem http://www.intrepidstudios.com/blog/2009/2/6/using-default-values-in-linq-to-sql. aspx để biết thêm thông tin. Đây là cách tiếp cận dứt khoát. – GONeale

+1

@GONeale: Liên kết chết. –

+2

Điều này không hoạt động. Nó sẽ không cho phép bạn bỏ qua giá trị khi chèn một đối tượng. Nếu bạn làm như vậy, nó sẽ cố gắng chèn 'null' làm giá trị cột, khi hành động đúng sẽ không liệt kê bất kỳ giá trị nào trong truy vấn. Vì vậy, khi cột là không nullable, bạn nhận được "không thể chèn null vào một cột không nullable" lỗi. – GSerg

11

Đặt thuộc tính Tự động tạo thành True.

enter image description here

+2

Điều này không hoạt động. Nó hoạt động nếu bạn luôn muốn sử dụng giá trị mặc định, nhưng nó sẽ không cho phép bạn sử dụng một giá trị không mặc định khi chèn một đối tượng. Linq2Sql sẽ bỏ qua giá trị bạn đã cung cấp và đọc lại giá trị mặc định. – GSerg

1

tôi đã phải đối mặt với cùng một vấn đề của kiểu dữ liệu boolean với mặc định là sai và không cập nhật giá trị Vì vậy, khi tôi nhìn thấy các bảng cơ sở dữ liệu, tôi đã tìm thấy ở đó không phải là khóa chính được thành lập, do đó khi tôi đã được thiết lập khóa chính nó đã được cập nhật tìm thấy. để kiểm tra bảng nếu nó có khóa chính hay không.

1

Nếu bạn cần thay đổi giá trị trong mã của riêng bạn (ví dụ: giá trị bảng loại mặc định) thì không sử dụng 'Giá trị được tạo tự động' hoặc bạn sẽ nhận được điều này sau khi bạn thử cập nhật.

Value of member 'AlternativeQuoteStatus' of an object of type 'OrderDetail' changed. A member that is computed or generated by the database cannot be changed.

Tôi thích đặt giá trị như vậy khi tôi tạo đối tượng, với dự phòng theo số OnCreated như được mô tả bởi những người khác tại đây.

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