c# - 在 NHibernate 中执行 Oracle PL/SQL 存储过程

标签 c# oracle nhibernate

首先,抱歉我的英语不好。

我现在正在创建 Oracle 数据库,其中所有 DML 都打包到存储过程中(例如,客户端不能直接执行“INSERT ONTO Articles(...),它必须调用 SP“ArticleInsert()”)。数据库也有它自己的安全系统——特殊的表,比如“Users”、“Privileges”、“Users_Privileges”。当我建立与数据库的连接时,我必须执行特殊的存储过程才能“登录系统”,例如“Login(database_user, user_password)”。在这个数据库“知道”之后,我是谁,并且知道我的权限。

我计划使用 NHibernate 在 C# 中编写客户端应用程序。但是这个 ORM 对于每个新对象修改都使用池中的新数据库连接。所以,我什么时候写 类“Article”并抑制标准 NHib DML 行为(“INSERT/UPDATE/DELETE”将替换为执行适当的存储过程),当 NHibernate 从游泳池?

或者这些任务是如何解决的?


谢谢

最佳答案

我认为您是在重新发明轮子。 Oracle 允许与任何 RDBMS 一样细粒度的记录访问,并且比您可能需要的更多。为什么不使用这种权力来安排数据权限?

无论如何,对于 CRUD 操作,是的,您可以通过为插入、更新和删除操作指定存储过程来覆盖 NHibernate 的默认 SQL 生成。查询必须符合 NH 的条款;通过调用检索存储过程强制延迟加载对象的每个字段和子对象,您将绕过 NHibernate 90% 的功能。因此,您至少需要重新设计安全性,以便在必要时允许经过身份验证的用户对架构/表具有 SELECT 权限。

关于c# - 在 NHibernate 中执行 Oracle PL/SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197211/

相关文章:

database - 使用 python 删除 oracle 表中的所有行需要无限的时间

nhibernate - 如何测试直接使用NHibernate的服务层?

c# - 引用装配错误

c# - 按下输入时从文本框中触发命令?

c# - 显示TimeLine右侧的数据

asp.net - 无法加载文件或程序集 'Oracle.ManagedDataAccessDTC.DLL' 或其依赖项之一

c# - 为 C# 制作 C++ DLL

sql - 当源未更改时,我们可以多次运行合并(Oracle)查询吗

.net - NHibernate HiLo的说明