繁体   English   中英

EF 用户定义函数迁移

[英]EF user-defined functions migration

我正在尝试使用 Entity Framework 添加用户定义的函数。

DbContext ,我将它们定义如下:

public IQueryable<GetProjectInspectionsFunctionResult> GetProjectInspections(int clientId, int projectId) => FromExpression(() => GetProjectInspections(clientId, projectId));
public IQueryable<GetProjectItemsFunctionResult> GetProjectItems(int clientId, int projectId) => FromExpression(() => GetProjectItems(clientId, projectId));
public IQueryable<GetProjectLopItemsFunctionResult> GetProjectLopItems(int clientId, int projectId) => FromExpression(() => GetProjectLopItems(clientId, projectId));
public IQueryable<GetProjectAttachmentsFunctionResult> GetProjectAttachments(int clientId, int projectId) => FromExpression(() => GetProjectAttachments(clientId, projectId));

modelBuilder.HasDbFunction(typeof(QAppDbContext).GetMethod(nameof(GetProjectInspections))).HasName("fn_GetProjectInspections");
modelBuilder.HasDbFunction(typeof(QAppDbContext).GetMethod(nameof(GetProjectItems))).HasName("fn_GetProjectItems");
modelBuilder.HasDbFunction(typeof(QAppDbContext).GetMethod(nameof(GetProjectLopItems))).HasName("fn_GetProjectLopItems");
modelBuilder.HasDbFunction(typeof(QAppDbContext).GetMethod(nameof(GetProjectAttachments))).HasName("fn_GetProjectAttachments");

我也有每个function的配置:

public class GetProjectInspectionsConfiguration : IEntityTypeConfiguration<GetProjectInspectionsFunctionResult>
{
     public void Configure(EntityTypeBuilder<GetProjectInspectionsFunctionResult> builder)
     {
          builder.HasNoKey();
     }
}

我还创建了一个空迁移并定义了每个 function:

migrationBuilder.Sql(
     @"CREATE FUNCTION [dbo].[fn_GetProjectInspections]
        (@clientId INT, @projectId INT)
     RETURNS TABLE
     AS
     RETURN
     (
        WITH clients AS(...)
        SELECT...
     )"
)

在我运行迁移后, DbContextSnapshot中出现错误,因为 EF 为每个 function 结果类型(例如GetProjectInspectionsFunctionResult )添加了.ToTable(null) )。

有没有办法克服这种情况? 我认为我需要避免任何类型的注释(表、function 等)?

我设法通过为每个 function 结果实体(由方法重载引起)明确指定名称来解决此问题:

modelBuilder.Entity<GetProjectInspectionsFunctionResult>((x) =>
{
    x.HasNoKey();
    x.ToTable(name: null);
})

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM