2013-02-15 30 views
8

Chúng tôi đang làm việc trong Entity framework Mã đầu tiênEF Mã thác đầu tiên xóa trên ngoại chìa khóa one-to-many

Chúng tôi có một video lớp

class Video{ 
    List<ImageInfo> Images{ 
     get; set; 
    } 
} 

infoclass hình ảnh của chúng tôi bao gồm một đường dẫn đến hình ảnh và một số thông tin khác

class ImageInfo{ 
    String path; 
    ... 
} 

chúng tôi muốn có EF tháo imageinfos khi gỡ bỏ video

vì vậy chúng tôi đã thay đổi trình mô hình hóa như sau:

modelBuilder 
    .Entity<Video>() 
    .HasMany(v => v.Images) 
    .WithRequired() 
    .WillCascadeOnDelete(true); 

chúng tôi không muốn thêm liên kết quay lại video trong lớp imageinfo của chúng tôi.

có thể lấy chức năng xóa tầng không có khóa ngoài 2 chiều không?

EDIT

các video_id của imageInfo không được điền vào trong cơ sở dữ liệu khi lưu video.

http://pbrd.co/14X82vb

cách khắc phục sự cố này?

Tôi không biết nếu liên quan của nó, nhưng khi chúng ta thêm một video mới với những hình ảnh cùng một lúc, chúng tôi nhận được lỗi này:

Unable to determine a valid ordering for dependent operations. Dependencies may exist due to foreign key constraints, model requirements, or store-generated values. 

Trả lời

14

Các WithRequired giới thiệu mối quan hệ 2 chiều. Vì vậy, bạn nên làm như sau.

modelBuilder 
    .Entity<Video>() 
    .HasMany(v => v.Imgages) 
    .WithOptional() 
    .WillCascadeOnDelete(true); 

... và giả sử bạn muốn mối quan hệ theo cách khác xung quanh ...

public class Video { } 
public class ImageInfo { 
    public virtual Video { get; set; } 
} 

modelBuilder 
    .Entity<ImageInfo>() 
    .HasRequired(v => v.Video) 
    .WithMany() 
    .WillCascadeOnDelete(true); 

PS: Tôi nghĩ rằng List<ImageInfo> nên virtual, vì vậy đây là cách tôi muốn định nghĩa nó. ..

public class Video { 
    public Video() { this.Images = new List<ImageInfo>(); } 
    public virtual ICollection<ImageInfo> Images { get; set; } 
} 
+0

Hoạt động như một sự quyến rũ. Chúng tôi cũng gặp vấn đề thứ hai. Chúng tôi đã gán một danh sách mới cho thuộc tính Hình ảnh, khiến đồng bộ hóa cơ sở dữ liệu thất bại. Vì vậy, chúng tôi đã học cách không bao giờ chỉ định một danh sách mới cho một thuộc tính. (tương tự với observableCollection và databinding) –

+0

Chấp nhận câu trả lời sẽ được đánh giá rất nhiều sau đó :-). Thêm vào đó nó cũng giúp danh tiếng của riêng bạn dẫn đến nhiều câu trả lời tốt hơn. – AxelEckenberger

+0

chúng tôi vẫn gặp sự cố khi xếp tầng hình ảnh khi xóa video: xem câu hỏi gốc (phần đã chỉnh sửa) –

Các vấn đề liên quan