我有一个SQL Server数据工具(SSDT)项目,它有许多存储过程,我想生成C#代码以使用T4调用它们。这样做有没有现成的例子?
到目前为止,我可以为每个proc创建一个函数,但我真的希望能够利用SSDT创建的元数据,这样我就可以从中获取参数,数据类型和返回值,而不是做字符串解析。
答案 0 :(得分:5)
COOL与资本C! (但不要告诉任何使用ORM的人!)
要获取数据类型等,请确保从MS DacFx团队获取最新的DacExtensions:
https://github.com/Microsoft/DACExtensions
新的api(偶然使用T4模板编写)可以让你找到所需的信息简单多了许多次。
本博客中应该提供足够的信息以帮助您:
https://the.agilesql.club/Blogs/Ed-Elliott/DacFx-Create-tSQLt-Tests-From-A-Dacpac
唯一的区别是您正在创建C#而不是T-SQL,因此您不必处理ScriptDom。
执行此操作时,请将其转储到github上,这听起来像是一个非常有用的项目。
答案 1 :(得分:1)
在评论中回答this question:
我可以使用正确的参数创建方法,但我很难挣扎 找到对象在模型中的位置代表 存储过程的内容。我需要知道返回的列 一个SELECT语句,以生成返回对象。有什么想法吗?
引用的对象由TSqlProcedure.BodyDependencies关系提供。这将返回存储过程体中引用的对象,但不会告诉您如何使用它们。关系模型并没有尝试嵌入此信息,因为它在部署中没有帮助,但您可以通过查询SQLDOM AST来获取该过程。
AST是一个语法树,用于定义Procedure语句的实际结构,包括程序体的结构。你需要做的是:
一些笔记/资源: