首页 > 解决方案 > 在迁移时使用 ASP.NET Core 中的代码优先方法创建 SQL Server 函数

问题描述

我有这样的数据库功能:

CREATE FUNCTION [dbo].[FuelByOrganization] 
    (@organziationId INT = 0)
RETURNS TABLE
AS 
    RETURN 
        SELECT 
            dbo.FuelDelivery.ID AS FuelDeleveryId, 
            dbo.Contracts.ContractNumber AS ContractLetterNumber, 
        FROM  
            dbo.FuelDelivery 
        INNER JOIN  
            dbo.Contracts ON dbo.FuelDelivery.ContractID = dbo.Contracts.ID
        WHERE 
            dbo.Contracts.OrganizationId = @organziationId;

我想在迁移数据库时运行此命令。我正在使用代码优先方法,如何在迁移期间创建此函数?

标签: asp.net-coreentity-framework-core

解决方案


替代答案:如果您计划在 LINQ 查询中使用此类函数 - 不要创建如此简单的存储过程,而是用 IQueryable 方法替换它们。然后,您可以将 IQueryable 与其他 LINQ 查询结合使用。

public static class BusinessFunctions
{
    public static IQueryable<FuelByOrganizationResult> FuelByOrganization(this MyContext ctx, int? organziationId = default)
    {
        var query = 
            from fd in ctx.FuelDelivery
            from c in fd.Contracts
            select new {
                fd,
                c
            };

        if (organziationId != bull)
            query = query.Where(q => q.c.OrganizationId = organziationId);

        return query.Select(q =>
            new FuelByOrganizationResult
            {
                FuelDeleveryId = q.fd.Id,
                ContractNumber = q.c.ContractNumber
            });
    }
}

推荐阅读