微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 EF Core 5.0 中使用表值函数

如何解决在 EF Core 5.0 中使用表值函数

我正在将一个 Asp.Net MVC 项目从 .Net 2.2 迁移到 .Net 5.0。

最后一个绊脚石是让表值函数与 EF Core 5 一起使用。

在 EF Core 2.2 中,语法是:

public IQueryable<OutOfService> UnitOutOfService(DateTime startingDate,DateTime endingDate) =>
Query<OutOfService>().Fromsql($"SELECT * FROM UnitOutofServiceView(NULL,1,'1,2,3,4,6',{startingDate},{endingDate},0)");

我只对提供 startingDateendingDate 参数感兴趣。

我能够通过控制器中的一张桌子加入 TVF:

model = await (
    from v in context.Vehicles
        join r in context.UnitOutOfService(DateTime.Now.Date,DateTime.Now.Date) on v.ID equals r.ID into loj
        from rs in loj.DefaultIfEmpty()
    where v.Schedule == true && v.Suspend == false
    orderby v.Name
    select new Indexviewmodel
    {
        ID = v.ID,Name = v.Name,...
        ServiceDescription = rs.Description
    }
).ToListAsync();

很遗憾,我无法在 EF Core 5.0 中使用它。

我已经在 ApplicationDbContext 类中定义了 TVF:

public IQueryable<OutOfService> UnitOutOfService(string sns,int expectedversion,string Site,bool UnitHistory,DateTime HistoryStartDate,DateTime HistoryDateEnd,int DaysOutMin,bool InServiceUnits,bool NotSowFromrO)
            => FromExpression(() => UnitOutOfService(null,"1,6",false,HistoryStartDate,HistoryDateEnd,false));

认”,参数值在控制器中似乎没有任何影响,所以我再次提供它们:

return await (
    from v in _context.Vehicles
    join r in _context.UnitOutOfService(DateTime.Now.Date,DateTime.Now.Date) on v.VehicleID equals r.UnitNumber into loj
    join r in _context.UnitOutOfService(null,today,false) on v.VehicleID equals r.UnitNumber into loj
    from rs in loj.DefaultIfEmpty()
    orderby v.Name
    select new Indexviewmodel
    {
        ID = v.ID,...
        ServiceDescription = rs.Description
    }
).ToArrayAsync();

运行控制器的代码会产生大量错误

我错过了什么?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。