Je travaille sur .NET CORE, le noyau Entity Framework. J'ai une procédure stockée que je dois exécuter à partir de la classe .NET. Ma procédure stockée prend un certain nombre de "Contexte" et je ne sais pas comment traiter cela, bien que j'ai dataView qui est la dernière exception.
Je blesse si je peux utiliser mon dataView au lieu de la classe context.dataModel, implémentation actuelle (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; }
}
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);
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//other models....
modelBuilder.Query<ClaimDataView>();
}
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()
Vous pouvez utiliser les Query Types introduits dans EF Core 2.1.
Vous devez d'abord enregistrer votre classe comme type de requête:
modelBuilder.Query<ClaimDataView>();
Ensuite, vous pouvez utiliser Context.Query<ClaimDataView>()
à la place de votre Context.Claims
Actuel:
var query = Context.Query<ClaimDataView>().FromSql(…);
Si vous n'êtes pas sur la version 2.1, vous devrez ajouter:
public DbSet<ClaimDataView> ClaimDataView { get; set; }
à votre moduleContext. Et ajoutez NotMapped à votre classe:
[NotMapped]
public class ClaimDataView