Tox*_*xic 7 c# stored-procedures entity-framework-core .net-core
我正在研究.NET CORE,实体框架核心.我有需要从.NET类执行的存储过程.我的存储过程需要多个'Context',我不知道如何处理这个,虽然我有dataView,这是最后的例外.
我是否可以使用我的dataView而不是context.dataModel类,当前实现(Context.Claims.FromSql)
public class ClaimDataView
{
public Guid ClaimId { get; set; }
public int IdNum { get; set; }
public string Value { get; set; }
public DateTime ExpirationDate { get; set; }
public ClaimAttributionActions Action { get; set; }
public bool ActiveStateForRole { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
public Guid UserId { get; set; }
public Guid ClientId { get; set; }
public Guid ConsultationId { get; set; }
var userParam = new SqlParameter("@UserVal", UserId);
var clientParam = new SqlParameter("@ClientVal", ConsultationId);
var consultationParam = new SqlParameter("@ConsultationVal", ConsultationId);
//**************need help in following line
var query = Context.Claims.FromSql("EXECUTE dbo.ListUserClaims @userId=@UserVal, @clientId=@ClientVal, @consultationId=@ConsultationVal"
, userParam, clientParam, consultationParam);
Run Code Online (Sandbox Code Playgroud)
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//other models....
modelBuilder.Query<ClaimDataView>();
}
Run Code Online (Sandbox Code Playgroud)
var query = Context.Query<UserDataView>().FromSql("EXECUTE dbo.ListUserClaims @userId=@UserVal, @clientId=@ClientVal, @consultationId=@ConsultationVal"
, userParam, clientParam, consultationParam);
Run Code Online (Sandbox Code Playgroud)
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()
Run Code Online (Sandbox Code Playgroud)
Iva*_*oev 15
您可以使用EF Core 2.1中引入的查询类型.
首先,您需要将您的类注册为查询类型:
modelBuilder.Query<ClaimDataView>();
Run Code Online (Sandbox Code Playgroud)
然后你可以用来Context.Query<ClaimDataView>()取代你当前的Context.Claims:
var query = Context.Query<ClaimDataView>().FromSql(…);
Run Code Online (Sandbox Code Playgroud)
If you are not on version 2.1, you will need to add:
public DbSet<ClaimDataView> ClaimDataView { get; set; }
Run Code Online (Sandbox Code Playgroud)
to your moduleContext. And add NotMapped to your class:
[NotMapped]
public class ClaimDataView
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6852 次 |
| 最近记录: |