Tôi có một DB SQLite được thiết lập để khi tôi xóa một Person thì delete được xếp chồng lên nhau. Điều này làm việc tốt khi tôi tự xóa một người (tất cả các bản ghi tham chiếu đến PersonID sẽ bị xóa). Nhưng khi tôi sử dụng Entity Framework để xóa các Person tôi nhận được một lỗi:Vấn đề với việc xóa tầng bằng cách sử dụng Entity Framework và System.Data.SQLite
System.InvalidOperationException: The operation failed: The relationship could not be changed because one or more of the foreign-key properties is non-nullable. When a change is made to a relationship, the related foreign-key property is set to a null value. If the foreign-key does not support null values, a new relationship must be defined, the foreign-key property must be assigned another non-null value, or the unrelated object must be deleted.
Tôi không hiểu tại sao điều này xảy ra. Trình kích hoạt của tôi được đặt để xóa tất cả các đối tượng liên quan trước khi xóa đối tượng mà đối tượng được yêu cầu xóa.
Khi tôi đi vào trình chỉnh sửa mô hình và kiểm tra thuộc tính của mối quan hệ, nó không hiển thị hành động nào cho thuộc tính OnDelete. Tại sao cài đặt này không chính xác bằng cách kéo nó từ DB? Nếu tôi thay đổi giá trị này để Cascade mọi thứ hoạt động đúng, nhưng tôi không muốn dựa vào sự thay đổi thủ công này bởi vì nếu tôi làm mới mô hình của mình từ DB và nó sẽ mất nó.
Đây là SQL thích hợp cho các bảng của tôi.
CREATE TABLE [SomeTable]
(
[SomeTableID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
[PersonID] INTEGER NOT NULL REFERENCES [Person](PersonID) ON DELETE CASCADE
)
CREATE TABLE [Person]
(
[PersonID] INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT
)
Có cách nào để giải quyết nếu bạn nên cập nhật End1 hoặc End2? Hoặc là nó chỉ là thử và sai? –
Nó phụ thuộc vào cách cơ sở dữ liệu của bạn được mô hình hoá.Nếu bạn có mối quan hệ một-nhiều, kết thúc 'một' sẽ được đặt thành' Cascade' – Omar