首页 > 解决方案 > 如何在具有 Linq To 实体的另一个上下文中使用数据库优先注册的 DbFunction?

问题描述

我将在安装在多个网站上的低层 C# 包中提供 Oracle 数据库函数(即 RemoveDiacritics),以允许这些应用程序在其 Linq To Entities 查询中使用我的自定义函数。目标是提供一种尽可能简单地使用此功能的方法,而无需更新自己的 EDMX 模型。

为了将此功能提供给其他应用程序,我创建了一个空的 EDMX 模型,然后在商店中添加了 RemoveDiacritics 功能:

<Function Name="REMOVEDIACRITICS" Aggregate="false" BuiltIn="true" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="MP" ReturnType="varchar2">
    <Parameter Name="INPUT" Type="varchar2" Mode="In" />
</Function>

我还公开了以下功能扩展:

public static class DbTools
{
    [DbFunction("ModelDbFunction.Store", "REMOVEDIACRITICS")]
    public static string RemoveDiacritics(this string input)
    {
        throw new NotSupportedException("this function is not supported");
    }
}

但我有点迷茫:如何将我的 DbFunction 上下文与其他网站上下文混合以允许他们使用此功能?根据以下限制,是否有其他方法(基于数据库优先逻辑)来提供数据库功能:

编辑:另一种方法是找到一种在 C# 包端的上下文中动态绑定 DbFunction 的方法,使 RemoveDiacritics 函数在 Linq 查询中可用;但这似乎不太可能,因为我没有找到任何替代方法(仍然使用数据库优先)。

谢谢你的帮助。

标签: c#entity-framework-6linq-to-entitiesdatabase-firstdbfunctions

解决方案


推荐阅读