Tôi có một bảng có một chỉ mục duy nhất trên một bảng với một cột Ordinal. Vì vậy, ví dụ như bảng sẽ có các cột sau:DbContext SaveChanges Order of Statement Execution
TableId, ID1, ID2, TT
Chỉ số duy nhất là trên các cột ID1, ID2, TT.
Vấn đề tôi gặp phải là khi xóa bản ghi khỏi cơ sở dữ liệu, tôi sẽ xác nhận lại các số thứ tự để chúng được tuần tự lần nữa. chức năng xóa của tôi sẽ giống như thế này:
public void Delete(int id)
{
var tableObject = Context.TableObject.Find(id);
Context.TableObject.Remove(tableObject);
ResequenceOrdinalsAfterDelete(tableObject);
}
Vấn đề là khi tôi gọi Context.SaveChanges() nó phá vỡ các chỉ số duy nhất vì nó dường như để thực hiện những điều khoản theo một thứ tự khác nhau hơn những gì họ đã được thông qua. Ví dụ sau đây sẽ xảy ra:
- resequence các Ordinals
- Xóa bản ghi
Thay vì:
- Xóa bản ghi
- resequence các Ordinals
Đây có phải là hành vi đúng đắn của EF không? Và nếu có, liệu có cách đánh giá hành vi này để ép buộc lệnh thi hành không?
Nếu tôi chưa giải thích điều này đúng cách, vui lòng cho tôi biết ...
Xin cảm ơn bạn đã trả lời! Tôi đã thực hiện điều này trước đó với một cơ sở dữ liệu và như bạn đã nói nó stinks. Mã này là khủng khiếp và là một nỗi đau, cộng với điều này sẽ chỉ có thể truy cập từ một phần quản trị và sẽ thay đổi một lượng nhỏ. Lý do chính cho các nhân viên được yêu cầu lại là người dùng quản trị có thể đặt thứ tự trên nhiều bảng và nhận được cầu kỳ hay bối rối khi họ thấy những khoảng trống ... Bit của một số tiền mà EF không thực hiện theo thứ tự bạn cung cấp. – didiHamman