c# - 如何在具有 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 上下文与其他网站上下文混合以允许他们使用此功能?根据以下限制,是否有其他方法(基于数据库优先逻辑)来提供数据库功能:
- 我们正在使用具有数据库优先逻辑的 EntityFramework 6.X (.NET Framework 4.6)
- 我们不会更新网站 EDMX
- 我们不会只使用 SQL 查询(不幸的是,没有办法混合 Linq-to-Entities 和 RawSQL 查询)
- 我们不会在应用过滤器和子句之前执行请求(出于性能原因)
编辑:另一种方法是找到一种在 C# 包端的上下文中动态绑定 DbFunction 的方法,使 RemoveDiacritics 函数在 Linq 查询中可用;但这似乎不太可能,因为我没有找到任何替代方法(仍然使用数据库优先)。
谢谢你的帮助。
解决方案
推荐阅读
- postgresql - 以静默模式卸载 Postgresql
- c# - 模态屏幕发布结果此模态屏幕
- php - 使用 dropzone 和 codeigniter 上传多个文件
- react-native - 从滚动视图底部重新加载内容时,滚动视图刷新控件不可见
- c# - 如何从 Json 中删除嵌套属性
- sql - 如何将嵌套的 json 键/值对展平为单个值数组?
- tensorflow - 如何在 Keras 的 ConvLSTM2D() 层中禁用窥视孔连接?
- java - 用于匹配特殊模式的正则表达式
- javascript - 如何在href中添加半链接?
- entity-framework - 在实体框架中使用多对多关系时如何仅加载 ID?