2012-01-05 9 views
7

Tôi đang sử dụng phiên bản mới nhất của Entity Framework (4.2) và cố gắng triển khai giao diện cho Thực thể của mình và vì lý do nào đó, nó không được biên dịch. nó đang ném một lỗi "Cannot convert expression type ICollection<IOrder> to return type ICollection<Order>". nếu tôi không sử dụng giao diện cho các thực thể, thì tôi không nhận được lỗi này.lỗi khi sử dụng giao diện cho thực thể Khung thực thể (4.2)

Tôi có một dự án riêng biệt cho giao diện (cho kho và dịch vụ ...) và tôi cần chuyển các thực thể EF trong các phương thức đó làm tham số và tôi không muốn truyền thực thể trong đó, vì điều đó sẽ yêu cầu giao diện dự án để có một sự phụ thuộc vào các thực thể EF.

mục tiêu của tôi là hơi tương tự như đề cập trong bài này Can I abstract Entity Framework away from my Entities?

đây là mẫu. Tôi chỉ cần đặt một mẫu ở đây, các thực thể thực tế của tôi là khác nhau, nhưng vấn đề là như nhau.

public interface IOrder 
{ 
    int OrderId { get; set; } 
    int CustomerId { get; set; } 
    ICustomer Customer { get; set; } 
} 

public class Order : IOrder 
{ 
    public int OrderId { get; set; } 
    public int CustomerId { get; set; } 
    ICustomer Customer { get; set; } 
} 

public interface ICustomer 
{ 
    int CustomerId { get; set; } 
    ICollection<IOrder> Orders { get; set; } 
} 

public class Customer : ICustomer 
{ 
    public int CustomerId { get; set; } 
    ICollection<IOrder> Orders { get; set; } 
} 

public class OrderMap : EntityTypeConfiguration<Order> 
{ 
    this.HasOptional(t => t.Customer) 
    .WithMany(t => t.Orders) //error comes from this line 
    .HasForeignKey(d => d.CustomerId); 
} 
+0

thể workaround tại http://stackoverflow.com/questions/9805329/how-to-use-interface-properties-with-codefirst/10994290 # 10994290 – Cel

Trả lời

6

Khuôn khổ đối tượng không thể làm việc với giao diện. Thuộc tính điều hướng của bạn phải sử dụng các loại thực thể thực (các lớp được ánh xạ).

+0

nhưng tôi có một dự án chỉ bao gồm các giao diện ví dụ cho phép nói rằng tôi có một "IOrderService" có phương thức được gọi là "IEnumerable GetOrders (Khách hàng của ICustomer) "(sẽ lần lượt gọi một kho lưu trữ để tìm nạp dữ liệu. Xin đừng cố tìm lỗi với điều này, nó chỉ là một ví dụ). Tôi không thể sử dụng loại thực thể thực sự ở đây vì dự án này cần phải có tham chiếu đến các thực thể thực có vẻ không phải là cách tiếp cận đúng nghĩa là dự án giao diện có tham chiếu đến loại thực. nó nên được bình thường theo cách khác tròn. – RKP

+0

trên thực tế tôi có tất cả các thực thể EF trong một dự án riêng biệt từ dự án Entity Framework để sử dụng chúng như là các đối tượng nghiệp vụ mà không phụ thuộc vào sự kiên trì. tất cả các ánh xạ và ngữ cảnh cơ sở dữ liệu vv đều nằm trong một dự án riêng biệt, nó có một tham chiếu đến dự án thực thể. – RKP

+0

Đây không phải là sự phụ thuộc vào sự kiên trì. Đây chỉ là sự phụ thuộc giữa các thực thể và EF đòi hỏi nó. Đơn giản chỉ cần EF không hỗ trợ nó và tôi không nhận thức được bất kỳ cách giải quyết nào. Hợp nhất các giao diện và thực thể của bạn với một assembly đơn và xác định các thuộc tính dẫn hướng với các kiểu thực thể thực. –

1

"Bạn có thể thêm các tập tin partial class riêng của bạn để xác định các giao diện được thực hiện - và để cung cấp bất kỳ phương pháp thực hiện thực tế bạn cần" - như đề xuất here