使用Entity Framework(4.2)实体的接口时出错

时间:2012-01-05 18:06:01

标签: entity-framework interface entity-framework-4.1

我正在使用最新版本的Entity Framework(4.2)并试图为我的实体实现接口,并且出于某种原因,它没有编译。它抛出错误“Cannot convert expression type ICollection<IOrder> to return type ICollection<Order>”。如果我不为实体使用接口,那么我不会收到此错误。

我有一个单独的接口项目(用于存储库和服务等),我需要将这些方法中的EF实体作为参数传递,我不想传递它们中的实际实体,因为这将需要接口项目依赖于EF实体。

我的目标有点类似于这篇文章Can I abstract Entity Framework away from my Entities?

中提到的目标

这是样本。我只是在这里放一个样本,我的实际实体是不同的,但问题是一样的。

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);
}

2 个答案:

答案 0 :(得分:7)

实体框架无法使用接口。您的导航属性必须使用真实实体类型(映射类)。

答案 1 :(得分:1)

“您可以添加自己的部分类文件来指定要实现的接口 - 并提供您需要的任何实际实现方法” - 按照建议here