C# 在实体框架核心中执行存储过程,而不需要映射到dbset

C# 在实体框架核心中执行存储过程,而不需要映射到dbset,c#,stored-procedures,.net-core,entity-framework-core,C#,Stored Procedures,.net Core,Entity Framework Core,我正在研究.NET核心,实体框架核心。我有一个需要从.NET类执行的存储过程。我的存储过程接受“上下文”的数量,我不知道如何处理这个问题,尽管我有dataView,这是最后一个例外 我想知道我是否可以使用dataView而不是context.dataModel类,当前实现(context.Claims.FromSql) 数据视图 存储过程调用 新更新 moduleContext类 您可以利用EF Core 2.1中引入的 首先,您需要将类注册为查询类型: modelBuilder.Query&l

我正在研究.NET核心,实体框架核心。我有一个需要从.NET类执行的存储过程。我的存储过程接受“上下文”的数量,我不知道如何处理这个问题,尽管我有dataView,这是最后一个例外

我想知道我是否可以使用dataView而不是context.dataModel类,当前实现(context.Claims.FromSql)

数据视图 存储过程调用 新更新 moduleContext类 您可以利用EF Core 2.1中引入的

首先,您需要将类注册为查询类型:

modelBuilder.Query<ClaimDataView>();

更新(EF Core 3.x+)

从EF Core 3.0开始,查询类型已更改并重命名为,因此相应的代码为

modelBuilder.Entity<ClaimDataView>().HasNoKey().ToView(null);
modelBuilder.Entity().HasNoKey().ToView(null);

var query=Context.Set().FromSql(…);

如果您不在2.1版上,则需要添加:

public DbSet<ClaimDataView> ClaimDataView { get; set; }

非常感谢你把我带向正确的方向,但是我仍然没有得到任何。。。我已经更新了我的问题。。。请参阅newUpate标题下的代码。。。我在模型类中添加了,但没有为ClaimDataView创建任何配置。我不确定我是否需要它,但有错误。。。请参阅上文,它不应为
ClaimDataView
创建
DbSet
。确保没有
dbset注意到更新的代码在某些部分使用
UserDataView
,在其他部分使用
ClaimDataView
。打字错误还是新异常的原因?请注意,
FromSql
已替换为
FromSqlInterpolated
FromSqlRaw
@EgorPavlikhin。我想这取决于您试图做什么。在这种情况下,避免使用DbSet的原因是不将实体映射到表。无键类型向EF模型注册您的类型,而无需在DB端为其创建表。然后可以对您的类型使用存储过程。
 var query = Context.Query<UserDataView>().FromSql("EXECUTE dbo.ListUserClaims @userId=@UserVal, @clientId=@ClientVal, @consultationId=@ConsultationVal"
            , userParam, clientParam, consultationParam);
System.InvalidOperationException: Cannot create a DbSet for 'UserDataView' because this type is not included in the model for the context.
 at Microsoft.EntityFrameworkCore.Internal.InternalDbQuery`1.get_EntityType()
modelBuilder.Query<ClaimDataView>();
var query = Context.Query<ClaimDataView>().FromSql(...);
modelBuilder.Entity<ClaimDataView>().HasNoKey().ToView(null);
var query = Context.Set<ClaimDataView>().FromSql(...);
public DbSet<ClaimDataView> ClaimDataView { get; set; }
[NotMapped]
public class ClaimDataView