Điều này thật lạ ... cập nhật được thực hiện nhiều lần nhưng không thể nhận ra tại sao điều này lại khác. mặc dù tôi đang sử dụng .net 4.0 bây giờ - tuy nhiên tôi nghi ngờ một lỗi của nó trong việc thực hiện L2S của nó. Nó không phải như thế này là một ứng dụng tuyệt vời và tuyệt vời của nó. Mặc dù tôi khá chắc chắn mã này làm việc trong khi tôi đã sử dụng RC.Linq2Sql - cố gắng cập nhật nhưng câu lệnh Đặt trong sql trống
Tôi cũng đã quản lý để tạo lại lỗi này bằng cách tạo dự án từ đầu bằng cách sử dụng thông tin bên dưới.
sự cố ở đây là câu lệnh cập nhật được tạo bởi L2S không có trường nào trong câu lệnh được đặt. Tôi đã thử kiểm tra rằng pk được thiết lập (chỉ có lý do tại sao tôi sẽ nghĩ rằng lĩnh vực ervery sẽ được yêu cầu ở đâu) và cũng đọc aroudn các thuộc tính dbml khác. Tôi đã được sử dụng linq2Sql trong khoảng 1 năm và chưa bao giờ có một vấn đề .. tôi vẫn nghĩ rằng tôi chỉ có một fart não rất lớn.
Lưu ý: Tôi đã xóa các phương thức bằng và GetHashCode để xóa một số trường - sự cố vẫn tiếp diễn sau này. Tôi đã không dọn sạch SQL mặc dù.
Tôi có một lớp khách hàng từ dbml Tôi đã thêm một phương pháp gọi là cập nhật
public partial class Client : ICopyToMe<Client>
Phương pháp CopyToMe được thừa hưởng từ một giao diện
public interface ICopyToMe<T>
{
void CopyToMe(T theObject);
}
cũng lớp đã GetHashCode ghi đè
public override int GetHashCode()
{
int retVal = 13^ID^name.GetHashCode();
return retVal;
}
và bằng
public override bool Equals(object obj)
{
bool retVal = false;
Client c = obj as Client;
if (c != null)
if (c.ID == this.ID && c._name == this._name)
retVal = true;
return retVal;
}
phương pháp cập nhật trong lớp phần
public void UpdateSingle()
{
L2SDataContext dc = new L2SDataContext();
Client c = dc.Clients.Single<Client>(p => p.ID == this.ID);
c.CopyToMe(this);
c.updatedOn = DateTime.Now;
dc.SubmitChanges();
dc.Dispose();
}
Phương pháp CopytoMe
public void CopyToMe(Client theObject)
{
ID = theObject.ID;
name = theObject.name;
}
Im tham gia một khách hàng đã được lựa chọn, thay đổi tên của nó và sau đó gọi phương thức cập nhật này. Các sql tạo ra là như sau
exec sp_executesql N'UPDATE [dbo].[tblClient]
SET
WHERE ([ID] = @p0) AND ([name] = @p1) AND ([insertedOn] = @p2) AND ([insertedBy] = @p3) AND ([updatedOn] = @p4) AND ([updatedBy] = @p5)
AND ([deletedOn] IS NULL) AND ([deletedBy] IS NULL) AND (NOT ([deleted] = 1))',N'@p0 int,@p1 varchar(8000),@p2 datetime,@p3 int,@p4
datetime,@p5 int',@p0=103,@p1='UnitTestClient',@p2=''2010-05-17 11:33:22:520'',@p3=3,@p4=''2010-05-17 11:33:22:520'',@p5=3
Tôi không có ý tưởng tại sao điều này không làm việc ... sử dụng loại
chọn đối tượng -> bộ lĩnh vực giá trị mới -> trình chọn đối tượng
mẫu nhiều lần và không gặp phải vấn đề này. cũng không có gì rõ ràng là sai với dbml - mặc dù đây có thể là một tuyên bố sai
bất kỳ ý tưởng nào?
Vấn đề này làm cho ngồi trông giống như tôi sẽ phải quay trở lại ADO.Net mà sẽ làm cho tôi buồn.
Hoàn hảo! Tôi đã làm điều chính xác và tìm thấy câu trả lời ở đây! Cảm ơn! – Ergodyne