2011-12-23 28 views
8

Tôi gặp lỗi Cannot remove an entity that has not been attached. khi cố gắng xóa bản ghi. Tôi đã googled xung quanh và mặc dù có rất nhiều nơi để tìm ra giải pháp để khắc phục vấn đề này, việc sửa chữa đề nghị không làm cho tôi thêm:linq-to-sql "Không thể xóa đối tượng chưa được đính kèm"

using (MyDataContext TheDC = new MyDataContext()) 
{ 
    TheDC.MyTable.Attach(ARecord); //added this line but doesn't fix it. 
    TheDC.MyTable.DeleteOnSubmit(ARecord); 
    TheDC.SubmitChanges(); 

câu hỏi lớn của tôi là thế này: không vấn đề này chỉ ảnh hưởng đến xóa các truy vấn hay nó cũng ảnh hưởng đến các loại truy vấn khác và tôi chưa gặp phải vấn đề này. Tôi đã viết một truy vấn cập nhật và có vẻ như nó hoạt động mà không gặp phải lỗi này.

Cảm ơn.

Trả lời

11

Vui lòng tham khảo SO bài viết này: How to delete in linq to sql?

... về gắn, nếu bạn đã có khóa chính. Nếu bạn không có khóa chính thì tôi luôn thực hiện tìm nạp sau đó xóa, nhưng, bất cứ khi nào tôi thực hiện tìm nạp, tôi có xu hướng lưu trữ khóa chính để cập nhật và xóa.

Nó sẽ xóa khỏi khóa chính, nhưng nếu bạn có điều đó thì chỉ cần đính kèm như tôi làm bên dưới và gọi xóa. Tôi không vượt qua xung quanh đối tượng cần thiết bởi DLINQ vì tôi muốn có thể thay đổi nó nếu tôi muốn, vì vậy tôi chuyển vào một đối tượng User khác và chỉ kéo PK từ lớp nghiệp vụ và đưa nó vào lớp DAO.

var db = new MeatRequestDataContext();    
if (input.UserID > 0) 
{ 
    entity = new User() 
    { 
     UserID = input.UserID 
    }; 
    db.Users.Attach(entity); 
    db.Users.DeleteOnSubmit(entity); 
} 
+3

+1 cho MeatRequestDataContext() – bytebender

4

Đối với tôi, bản sửa lỗi vừa tìm kiếm đối tượng cơ sở dữ liệu trước.

var db = new MeatRequestDataContext(); 
if (input.UserID > 0) 
{ 
    var existing = db.Users 
     .Single(user => user.UserID == input.UserID); 

    db.Users.DeleteOnSubmit(existing); 
} 

Trong đầu, tôi chỉ có thể xóa những gì đã có ở đó, vì vậy tôi cần tìm các mục trong cơ sở dữ liệu mà tôi muốn xóa trước. Điều này cũng làm việc với các bộ sưu tập và DeleteAllOnSubmit().

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