выполнить хранимую процедуру в Entity Framework Core, не ожидая сопоставления с базой данных - PullRequest
0 голосов
/ 24 августа 2018

Я работаю на .NET CORE, ядре Entity Framework. У меня есть хранимая процедура, которую мне нужно выполнить из класса .NET. Моя хранимая процедура принимает номер «контекста», и я не знаю, как с этим справиться, хотя у меня есть dataView, что является окончательным исключением.

Я бы хотел, если бы я мог использовать свой dataView вместо класса context.dataModel, текущая реализация (Context.Claims.FromSql)

DataView

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);

новое обновление

moduleContext Class

  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()

Ответы [ 2 ]

0 голосов
/ 24 августа 2018

Если вы не пользуетесь версией 2.1, вам нужно добавить:

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

к вашему модулю контекста.И добавьте NotMapped в свой класс:

[NotMapped]
public class ClaimDataView
0 голосов
/ 24 августа 2018

Вы можете использовать Типы запросов , представленные в EF Core 2.1.

Сначала вам нужно зарегистрировать свой класс как тип запроса:

modelBuilder.Query<ClaimDataView>();

Тогда вы можете использовать Context.Query<ClaimDataView>() вместо вашего текущего Context.Claims:

var query = Context.Query<ClaimDataView>().FromSql(…);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...