Asp.net core 同一模型的EF Core FromSql,但具有不同的查询和额外列

Asp.net core 同一模型的EF Core FromSql,但具有不同的查询和额外列,asp.net-core,.net-core,entity-framework-core,Asp.net Core,.net Core,Entity Framework Core,假设我有C类操作 使用EF Core,我想将其用于多个查询。一切都好,然后我写选择我自己。但我面临的问题是,有些存储过程我无法更改。这些存储过程不会返回类所需的所有列 例如,SP_1返回Id、名称和代码。SP_2返回Id、名称和描述 有没有办法将这些属性设置为一些默认值或伪值?或者忽略这些可选属性,但当它们从数据库返回时映射到类?对于不是表模型的查询,不同的对象将是更好的解决方案 这些是DTO模型 程序的内容必然会发生变化。据我所知,这是EF/EF核心的负面观点。FromSql不仅要求泛型,还要

假设我有C类操作

使用EF Core,我想将其用于多个查询。一切都好,然后我写选择我自己。但我面临的问题是,有些存储过程我无法更改。这些存储过程不会返回类所需的所有列

例如,SP_1返回Id、名称和代码。SP_2返回Id、名称和描述


有没有办法将这些属性设置为一些默认值或伪值?或者忽略这些可选属性,但当它们从数据库返回时映射到类?

对于不是表模型的查询,不同的对象将是更好的解决方案

这些是DTO模型


程序的内容必然会发生变化。

据我所知,这是EF/EF核心的负面观点。FromSql不仅要求泛型,还要求您从查询中得到的响应是数据库中的1对1模型/表,以便它能够正确地映射它

对于这样的东西,您可以使用ADO.NET,甚至可以使用Dapper,但我以前从未使用过它


编辑:你可以用EF/EF核心来做,但它会很难看。您需要为希望通过FromSql方法获得的每个响应创建新模型,并将该模型用于数据库中的新表。但是不要这样做。

虽然不是一个英孚核心答案,但我很高兴使用这种简洁的方式

它确实意味着返回使用System.Data.SqlClient或Microsoft.Data.SqlClient,但它允许您运行自定义SQL查询并将结果映射回对象。在你的例子中

using Dapper;

using (var connection = new SqlConnection("")){
    connection.Open();

    IEnumerable<Operation> operations = connection.Query<Operation>("exec sp_1",
            commandType: CommandType.StoredProcedure);

}

您可以将数据映射到DTO数据传输对象

此DTO可根据您的需要进行定制

您可以将要从实体输出的任何字段映射到特殊DTO

此映射可以手动完成,也可以由自动映射器完成

class obj1
{
Id
Name
Code
}

class obj2
{
Id
Name
Description
}
using Dapper;

using (var connection = new SqlConnection("")){
    connection.Open();

    IEnumerable<Operation> operations = connection.Query<Operation>("exec sp_1",
            commandType: CommandType.StoredProcedure);

}