2010-01-06 40 views
8

Tôi đang cố thiết lập dự án bằng Entity Framework 4, POCO và Chỉ mã.Sử dụng Giao diện có thuộc tính điều hướng

Có thể trong khung thực thể cho loại thuộc tính điều hướng là giao diện không?

Tôi có lớp "Tác vụ". Nhiệm vụ có thể được gán cho một người dùng hoặc một nhóm mà mỗi người được đại diện bởi một lớp riêng biệt và được lưu trữ trong các bảng riêng biệt. Các lớp trông giống như thế này:

public class User : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Email { get; set; } 
    public String Password { get; set; } 
} 

public class Group : IAssignable 
{ 
    public String Name { get; set; } 
    public int ID { get; set; } 
    public String Manager { get; set; } 
    public String Department { get; set; } 
} 

public class Task 
{ 
    public String Title { get; set; } 
    public DateTime DueDate { get; set; } 
    public String Details { get; set; } 
    public IAssignable AssignedTo { get; set; } 
} 

Có cách nào để thuộc tính AssignedTo có thể là thuộc tính điều hướng trong khuôn khổ thực thể không? Tôi cho rằng sẽ có một số loại phân biệt đối xử để EF biết liệu nó có cần tìm trong bảng Người dùng hay bảng Nhóm nhưng tôi có thể tìm ra ánh xạ bằng cách sử dụng Code-Only hoặc EDMX.

+0

Tôi cũng quan tâm đến giải pháp cho vấn đề này. – Ciel

Trả lời

0

Bạn có thể tiết kiệm cho mình rất nhiều công việc bằng cách sử dụng Bộ công cụ chuyển đổi mẫu văn bản (T4) được hỗ trợ bởi EF4. Tôi thấy cái này sau một tốt 12 giờ tìm kiếm một con đường xung quanh bằng tay tạo POCOs và giao diện của tôi,

http://blogofrab.blogspot.com/2010/08/maintenance-free-mocking-for-unit.html

Bên cạnh việc cung cấp một cơ sở tuyệt vời để thử nghiệm đơn vị, nó tự động tạo ra các thuộc tính định hướng dựa trên các mối quan hệ được xác định trong mô hình của bạn.

1

Tôi biết đây là một câu hỏi cũ, nhưng không có, không có tính năng của Entity Framework (ngay cả phiên bản mới nhất 6) cho phép bạn ánh xạ thuộc tính điều hướng với một loại giao diện. Tuy nhiên, bạn có thể lập bản đồ nhiều thuộc tính điều hướng với các loại cụ thể (và một ràng buộc mà chỉ có thể đặt) và cung cấp thuộc tính chưa được ánh xạ của loại giao diện kết hợp các thuộc tính điều hướng cụ thể thành một thuộc tính duy nhất. Thật không may, điều này có thể làm cho truy vấn của bạn trở nên phức tạp hơn vì một số truy vấn nhất định sẽ cần biết thuộc tính điều hướng cụ thể nào cần tham chiếu (và bạn không thể truy vấn thuộc tính giao diện chưa được ánh xạ).

Có sự phức tạp đáng kể xung quanh hỗ trợ cho các thuộc tính điều hướng đa hình. Hãy xem xét điều gì sẽ xảy ra để truy vấn thuộc tính ban đầu của bạn AssignedTo nếu bạn cho rằng nó được ánh xạ tới một cột chẳng hạn như AssignedToId int. Bạn phải kết hợp hoặc tham gia cả hai tập hợp thực thể UserGroup và hy vọng rằng một AssignedToId nhất định xuất hiện chỉ trong một trong số chúng. Đây là phương pháp được sử dụng bởi ánh xạ loại Table-Per-Concrete (TPC) nhưng nó chỉ hoạt động với kế thừa lớp (không phải giao diện) và lập kế hoạch cẩn thận để tạo các id riêng biệt trên các loại tham gia.

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