entity-framework - 使用 Entity Framework (4.2) 实体的接口(interface)时出错

标签 entity-framework interface entity-framework-4.1

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

我有一个单独的接口(interface)项目(用于存储库和服务等),我需要将这些方法中的 EF 实体作为参数传递,我不想传递其中的实际实体,因为这需要接口(interface)项目具有对 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);
}

最佳答案

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

关于entity-framework - 使用 Entity Framework (4.2) 实体的接口(interface)时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8747442/

相关文章:

c - 查找 EF 上下文的正确名称

c# - 如何修复 "SqlException: The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value."

ef-code-first - 使用 Entity Framework Code First 存储只读计算字段

c# - EF 失败将 View 映射到对象

entity-framework-4.1 - Entity Framework 代码首先按 ID 删除而不获取(通用样式)

c# - Entity Framework 树结构

c# - Entity Framework 抛出异常 - 发生网络相关或特定于实例的错误

language-agnostic - "program to an interface"是什么意思?

c# - 通过使用接口(interface)为类提供属性

c++ - 内部库类型是否应该通过我的库界面可见?