2012-01-13 20 views
13

Xin lỗi vì tiếng Anh của tôi.Tại sao EF cố gắng để chèn NULL trong id-cột?

Tôi đang viết dự án của mình bằng Entity Framework 4.0 (Mẫu trước). Khi bắt đầu dự án, tôi phải đối mặt với vấn đề này: Tôi đang cố gắng chèn đối tượng đã điền vào cơ sở dữ liệu, nhưng tôi bị ngoại lệ:

"Không thể chèn giá trị NULL vào cột 'CategoryId', bảng Cột 'ForumDB.dbo.Categories'; không cho phép null. INSERT không thành công. Câu lệnh đã bị chấm dứt. "

Category usingCategory = new Category("Using Forums", "usingforums", 0); 
    using (Context) 
    { 
     Context.Categories.AddObject(usingCategory); 
     Context.SaveChanges(); 
    } 

Tôi đã kiểm tra đối tượng này và tôi chắc chắn rằng nó đã được lấp đầy.

Chỉ trong trường hợp:

public Category(string name, string urlName, int index) 
{ 
    CategoryId = Guid.NewGuid(); 
    Name = name; 
    UrlName = urlName; 
    CategoryIndex = index; 
} 

Hãy cho tôi biết những gì đang xảy ra? Cảm ơn bạn đã giúp đỡ!

+0

loại dữ liệu nào là CategoryId của bạn? – Kyle

+0

@Kyle, guid (uniqueidentifier). –

Trả lời

24

Hãy xem xét điều này: https://stackoverflow.com/a/5338384/171703 - khung thực thể có thể giả định rằng trường CategoryId của bạn là một danh tính và do đó chuyển null vào cơ sở dữ liệu mong muốn nó điền vào cho bạn.

+1

Tốt, nhưng tôi sử dụng mô hình đầu tiên, nhưng trong câu hỏi này, vấn đề đã được giải quyết trong phạm vi mã đầu tiên. –

+0

@KovpaevAlexey Câu trả lời được chấp nhận trong câu hỏi đó là dành cho mã đầu tiên, nhưng câu trả lời được liên kết cụ thể trong câu hỏi đó là dành cho mô hình trước tiên. – hvd

+0

@hvd, sự cố này đã được giải quyết khi tôi thêm id tạo trên phía DB. –

14

Tôi đã tham gia vào ngày hôm nay và phải tạo lại các lớp EF của mình từ cơ sở dữ liệu.

Sau khi làm điều đó, tôi thấy rằng EF thêm:

[DatabaseGenerated(DatabaseGeneratedOption.None)] 
public int Id { get; set; } 

này "Id" lĩnh vực trước kia từng là một cột nhận dạng trong SQL nhưng được đổi thành ứng dụng được giao.

Tôi nghĩ rằng nếu bạn không có thuộc tính mà EF sẽ không thực sự gửi ID vào cơ sở dữ liệu ('ước về cấu hình')

+1

Làm việc cho tôi: không cần phải tạo lại các lớp, chỉ cần thêm thuộc tính vào thuộc tính và nó đã hoạt động. – sluiper

+0

cũng làm việc cho tôi .. cảm ơn bạn rất nhiều – Steph8

3

tôi đã tạo ra bảng với int Id như PK, nhưng đã bị lãng quên để đặt "Đặc điểm nhận dạng" = True

+0

Bạn đã thực hiện một ngày của tôi! – Hari

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