Đây là tình hình của tôi:Entity Framework: Tại sao phương thức WillCascadeOnDelete() bị bỏ qua?
public abstract class Article
{
[key]
public Guid Guid { get; set;}
public string Name { get; set;}
.
.
.
}
public class Download : Article
{
...
}
public abstract class Category : Article
{
...
}
public class DownloadCategory : Category
{
....
}
Và sau đó tôi nên có một nhiều-nhiều mối quan hệ giữa Tải và DownloadCategory
như thế này:
public class DownloadInCategory
{
[Key, Column(Order = 1), Required]
[ForeignKey("Download")]
Public Guid DownloadGuid { get; set; }
Public Download Download { get; set; }
[Key, Column(Order = 2), Required]
[ForeignKey("Category")]
Public Guid CategoryGuid { get; set; }
Public DownloadCategory Category { get; set; }
}
Khi tôi gọi Add-Migration
sự di cư tạo ra cho DownloadInCategory
thực thể là:
CreateTable("dbo.DownloadInCategories",
c => new
{
CategoryGuid = c.Guid(nullable: false),
DownloadGuid = c.Guid(nullable: false),
})
.PrimaryKey(t => new { t.CategoryGuid, t.DownloadGuid })
.ForeignKey("dbo.DownloadCategories", t => t.CategoryGuid)
.ForeignKey("dbo.Downloads", t => t.DownloadGuid, cascadeDelete: true)
.Index(t => t.CategoryGuid)
.Index(t => t.DownloadGuid);
Đây là câu hỏi của tôi: Như bạn notic e không thêm cascadeDelete: true
vào một trong các khóa ngoại. TẠI SAO!!!!!!?????
Tôi nên đề cập đến rằng tôi đã không thay đổi bất kỳ Công ước modelbuilder
nào. Vì vậy, lược đồ này nên thêm Casscade vào xóa trong di chuyển. Thuộc tính của tôi là [Required]
.
Tôi đang làm gì sai?
Thanks guys ...
Cập nhật: Xin lưu ý rằng Article
và Category
lớp là abstract
. Tôi đã thay đổi các lớp học ở trên
Cập nhật 2: Không có vấn đề logic nào với lược đồ này. Nếu tôi chỉnh sửa quá trình di chuyển theo cách thủ công, nó sẽ cập nhật cơ sở dữ liệu bình thường.
Cập nhật 3: My EF Thừa kế Phương pháp là TPC
Cập nhật 4: Sau Một số điều tra và xét nghiệm Dường như vấn đề được inheritanced từ Category
. Khi DownloadCategory
được kế thừa từ Category
, Cascade không được triển khai. nhưng khi tôi Inherit DownloadCategory
trực tiếp từ Article, Cascade được triển khai. Nhưng tại sao lại một lần nữa?
Nếu chỉnh sửa chuyển đổi bằng tay hoạt động tốt, nhiều này của một câu hỏi lý thuyết về lý do tại sao cascade delete không được suy ra? – jjj
@jjj No. Điều này hoàn toàn thực tế theo quan điểm của tôi. Chỉnh sửa thủ công quá trình di chuyển không phải là một phương pháp hay. Trong các dự án lớn hơn như dự án tôi đang làm, Làm một điều như vậy sẽ thêm nhiều cân nhắc để bảo trì và phát triển các tính năng mới cho dự án. Tôi nghĩ rằng việc chỉnh sửa thủ công quá trình di chuyển là sai. và di chuyển phải phù hợp với lược đồ của các mô hình. – abzarak
Tôi cho rằng điều đó sẽ đúng trong một thế giới lý tưởng, nơi các quy ước dựng sẵn hoàn hảo. Bạn có thể tìm hiểu mã nguồn để tìm ra lý do tại sao điều này xảy ra trong trường hợp này, nhưng tôi đoán đó là kết quả của một phím tắt để tránh chu kỳ. – jjj