Asp.net core 同一模型的EF Core FromSql,但具有不同的查询和额外列
假设我有C类操作 使用EF Core,我想将其用于多个查询。一切都好,然后我写选择我自己。但我面临的问题是,有些存储过程我无法更改。这些存储过程不会返回类所需的所有列 例如,SP_1返回Id、名称和代码。SP_2返回Id、名称和描述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不仅要求泛型,还要
有没有办法将这些属性设置为一些默认值或伪值?或者忽略这些可选属性,但当它们从数据库返回时映射到类?对于不是表模型的查询,不同的对象将是更好的解决方案 这些是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);
}