我可以通过委托给EF中的存储过程来延迟加载导航属性吗?

dom*_*mer 9 stored-procedures entity-framework navigation-properties

我有以下客户类:

public class Customer 
{
    public long Id { get; set; }

    public virtual ICollection<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的数据库有Customers和Orders表,但没有外键关系.使用存储过程获取客户的订单,该存储过程获取客户ID并返回订单行.我无法修改数据库.

我知道如何从Entity Framework调用存储过程,但是,是否可以使用流畅的API配置DbContext,以便访问客户对象的Orders集合会通过调用存储过程来延迟加载实体?

我正在使用最新版本的EF.

Ger*_*old 1

不,你不能。延迟加载在 EF 创建的代理对象中进行编码(如果可能),无法拦截/配置代理的生成方式。

甚至不可能将 a 的默认读取操作映射DbSet到存储过程。这始终是一个询问。只有create、update和delete可以映射到存储过程

原因(我认为)是存储过程不可组合,因此如果在复杂的 LINQ 查询中将一个实体映射到存储过程(用于读取),则不可能将查询转换为一个 SQL 语句。