2012-11-21 34 views
5

Tôi có hai bảng:Entity Framework Mã lập bản đồ đầu tiên mà không nước ngoài chủ chốt

Yêu cầu

  • ID (int) PK
  • ClientID (int)
  • JobNumber (int)

Bình luận

  • ID (int) PK
  • job_id (int)
  • Comment (varchar)

Các bảng không có phím nước ngoài và không có khả năng bổ sung thêm bất kỳ. Tôi đang cố gắng lập bản đồ chúng trong EF. Tôi có các lớp cho mỗi và tôi đang cố gắng xác định mối quan hệ trong mã thông thạo để ánh xạ Comment.Job_ID đến Requirement.JobNumber. Một yêu cầu có thể có nhiều ý kiến. Yêu cầu có danh sách Nhận xét và Nhận xét có thuộc tính Yêu cầu.

tôi đã thiết lập bản đồ này:

modelBuilder.Entity<Comment>().HasRequired(c => c.Requirement) 
        .WithMany(s => s.Comments) 
        .HasForeignKey(f => f.Job_ID); 

Tôi đang gặp khó khăn cố gắng để có được Comment.Job_ID để ánh xạ Requirement.JobNumber.

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

7

Không thể thực hiện được. Với khung thực thể, thực thể mà thuộc tính điều hướng Comment.Requirement được đề cập đến thường được xác định bằng thuộc tính khóa (chính) trong Requirement, tức là ID. Không có tùy chọn ánh xạ để xác định rằng thuộc tính đích là bất kỳ điều gì khác ngoài thuộc tính khóa - như JobNumber hoặc thuộc tính không khóa khác.

tôi chỉ có thể tưởng tượng rằng bạn có thể "giả" thuộc tính khóa chính trong mô hình là JobNumber thay vì ID (cho rằng JobNumber là duy nhất trong bảng Requirement):

modelBuilder.Entity<Requirement>().HasKey(r => r.JobNumber); 

tôi không biết nếu điều đó có thể có tác dụng phụ không mong muốn khác. (Để chắc chắn nó không hoạt động nếu JobNumberkhông phải là duy nhất vì EF sẽ không cho phép có nhiều hơn một thực thể với cùng một khóa được đính kèm theo ngữ cảnh và cập nhật/xóa và như vậy sẽ không tìm thấy bản ghi chính xác cơ sở dữ liệu.) Nó cảm thấy sai và hacky với tôi. Tôi thành thật thậm chí sẽ không thử điều đó, sống với thực tế là bạn không có mối quan hệ khóa ngoài thực sự trong cơ sở dữ liệu, hãy quên các thuộc tính điều hướng Requirement.CommentsComment.Requirement và sử dụng hướng dẫn sử dụng join s trong LINQ để liên kết dữ liệu/thực thể bảng Tôi cần chúng trong một tình huống nhất định.

+0

Cảm ơn. Điều đó rất hữu ích. Đã bắt đầu cảm thấy như tôi đã uốn các quy tắc một chút quá nhiều. Mùi mã xấu :-) – Matt

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