2012-05-03 34 views
15

Tôi hiện đang sử dụng mã EF đầu tiên 4.3 với tính năng di chuyển được bật nhưng tính năng di chuyển tự động bị tắt.Entity Framework Chú thích dữ liệu tương đương với .WillCascadeOnDelete (false);

Câu hỏi của tôi rất đơn giản, là có một chú thích dữ liệu tương đương với .WillCascadeOnDelete cấu hình mô hình (false)

Tôi muốn để trang trí lớp học của tôi để các mối quan hệ chính nước ngoài không kích hoạt một tầng xóa.

mẫu Mã số:

public class Container 
{ 
    public int ContainerID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Output> Outputs { get; set; } 
} 

public class Output 
{ 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

public class OutputType 
{ 
    public int OutputTypeID { get; set; } 
    public string Name { get; set; } 
} 

Tôi muốn làm điều gì đó như thế này:

public class Output 
{ 
    [CascadeOnDelete(false)] 
    public int ContainerID { get; set; } 
    public virtual Container Container { get; set; } 

    [CascadeOnDelete(false)]  
    public int OutputTypeID { get; set; } 
    public virtual OutputType OutputType { get; set; } 

    public int Quantity { get; set; } 
} 

Bằng cách này tôi sẽ có thể giàn giáo di cư một cách chính xác. điều này đã tạo ra các mối quan hệ khóa ngoại được xóa bỏ tại thời điểm này.

Bất kỳ ý tưởng nào, ngoài việc sử dụng Cấu hình mô hình?

+0

có cùng một câu hỏi. Tìm thấy làm thế nào để kích hoạt nó [ở đây] (http://stackoverflow.com/a/33276901/4625305), nhưng những gì tôi muốn là để vô hiệu hóa nó chỉ cho một mối quan hệ. – AXMIM

Trả lời

19

Không có sự tương đương nào như vậy. Bạn phải sử dụng API thông thạo để xóa bỏ thác tầng có chọn lọc hoặc bạn phải xóa quy ước OneToManyCascadeDelete để loại bỏ nó trên toàn cầu.

+0

sẽ xóa quy ước OneToManyCascadeXóa, xóa quy ước ngay cả khi bạn thêm chú thích như [Bắt buộc] vào khóa ngoại? – FRoZeN

+0

Chỉ nên sử dụng tính năng xóa tầng cho các mối quan hệ được yêu cầu và loại bỏ quy ước này sẽ phá vỡ nó. Tùy chọn chỉ được đặt thành null. –

+0

Trong trường hợp sử dụng OneToManyCascadeDelete = false, tôi làm cách nào để kích hoạt tính năng xóa tầng có chọn lọc với chú thích dữ liệu? – ironic

2

Tạo một lớp bản đồ (cú pháp thông thạo) và sử dụng mã dưới đây:

// add relationships "Post" and "User" to a "Comment" entity 
this.HasRequired(t => t.Post) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.PostID) 
    .WillCascadeOnDelete(false); // <--- 

this.HasOptional(t => t.User) 
    .WithMany(t => t.Comments) 
    .HasForeignKey(d => d.UserID) 
    .WillCascadeOnDelete(false); // <--- 

Dưới đây là một nice post về cách thiết lập ánh xạ thông thạo nếu bạn cần thêm thông tin.

+0

Liên kết là bị hỏng. – AXMIM

0

Chỉ cần làm cho FK tài sản nullable có thể ngăn ngừa thác xóa xảy ra:

public int? OutputTypeID { get; set; } 
Các vấn đề liên quan