首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何对上下文执行RawSql

如何对上下文执行RawSql
EN

Stack Overflow用户
提问于 2019-09-10 13:18:52
回答 1查看 39关注 0票数 0

我目前有一个正在处理的项目,该项目有一个连接到它的数据库。在上述数据库中,我需要查询一些没有关系的表。我需要获取一组特定的数据,以便在我的用户界面上显示它。但是,我需要能够引用返回的数据,将其放入列表并将其转换为json。我有一个只需要对上下文执行的存储过程,因为它从许多不同的表中检索数据。

我尝试过使用ExecuteSqlCommand,但这不起作用,因为它返回-1,并且不能将其放入列表中。

我尝试过使用linq来选择我想要的列,但是它真的很混乱,而且我不能轻松地检索数据。

我尝试过使用FromSql,但是它需要一个模型来根据上下文执行,而这正是我不想要的。

代码语言:javascript
复制
public string GetUserSessions(Guid memberId)
{
    string sql = $"EXECUTE dbo.GetUserTrackByMemberID @p0";
    var session = _context.Database.ExecuteSqlCommand(sql, memberId);
    var json = JsonConvert.SerializeObject(session);
    return json;
}

这是ExecuteSqlCommand示例,它返回-1,并且不能放入列表中,因为将有多个会话。

代码语言:javascript
复制
public string GetUserSessions(Guid memberId)
{
    var session = _context.MemberSession.Where(ms => ms.MemberId == memberId).Select(s => new Session() { SessionId = 
                s.SessionId, EventId = s.Session.EventId, CarCategory = s.Session.CarCategory, AirTemp = s.Session.AirTemp,
                TrackTemp = s.Session.TrackTemp, Weather = s.Session.Weather, NumberOfLaps = s.Session.NumberOfLaps, SessionLength = s.Session.SessionLength,
                Event = new Event() { EventId = s.Session.Event.EventId, TrackId = s.Session.Event.TrackId, Name = s.Session.Event.Name, NumberOfSessions = 
                s.Session.Event.NumberOfSessions, DateStart = s.Session.Event.DateStart, DateFinish = s.Session.Event.DateFinish, TyreSet = s.Session.Event.TyreSet,
                Track = new Track() { TrackId = s.Session.Event.Track.TrackId, Name = s.Session.Event.Track.Name, Location = s.Session.Event.Track.Location, TrackLength 
                = s.Session.Event.Track.TrackLength, NumberOfCorners = s.Session.Event.Track.NumberOfCorners} } });
    var json = JsonConvert.SerializeObject(session);
    return json;
}

这是使用Linq,但是它真的很混乱,我觉得可能有更好的方法来做这件事,然后当从json中检索数据时,它会更痛苦。

代码语言:javascript
复制
public string GetUserSessions(Guid memberId)
{
    var session = _context.MemberSession.FromSql($"EXECUTE dbo.GetUserSessionByMemberID {memberId}").ToList();
    var json = JsonConvert.SerializeObject(session);
    return json;
}

这是我想要的最理想的方式,但是因为我使用的是MemberSession模型,所以它只会从MemberSession表中的存储过程中检索数据,但是我也想要其他表中的数据。

代码语言:javascript
复制
public string GetUserSessions(Guid memberId)
{
    var session = _context.MemberSession.Where(ms => ms.MemberId == memberId).Include("Session").Include("Event").ToList();
    var json = JsonConvert.SerializeObject(session);
    return json;
}

我尝试过这种方法,但是因为Event表没有对MemberSession的引用/关系,所以它返回一个错误。

正如我在前面的RawSql示例中所说的,我只获取MemberSession表中的表数据,而不获取其他表。

没有错误消息。

EN

回答 1

Stack Overflow用户

发布于 2019-09-10 13:35:29

代码语言:javascript
复制
using (var context = new DBEntities())
{
     string query = $"Exec [dbo].[YOUR_SP]";
     List<ResponseList> obj = context.Database.SqlQuery<ResponseList>(query).ToList();
     string JSONString = JsonConvert.SerializeObject(obj);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57864407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档