O/ r -映射单个任意SQL SELECT语句到单个类
本文关键字:SELECT SQL 语句 单个类 单个任 映射 | 更新日期: 2023-09-27 17:54:02
我不太了解ORM工具的工作机制,但从使用实体框架(Entity Framework, EF)来看,我知道从存储在数据库中的任意视图自动生成CLR类是可能的。在EF中,这些类是从实体模型自动生成的。EF甚至可以从存储过程中获取列信息,并根据这些信息生成一个新的"复杂类型"。
- 怎么可能自动生成。net类,只使用(1)SQL SELECT语句提供的信息和(2)查询数据库元数据的能力?
因为SQL存储在数据库中,我们在编译时就知道SELECT SQL是什么。类似地,实体框架在编译时知道视图或存储过程的SELECT SQL是什么。我们希望通过了解SELECT SQL和查询数据库的元数据来自动生成。net类。我需要能够将生成的单个DataTable转换为自动生成的类。
似乎我的问题的答案在于拥有ORM工具的知识;
- 是否有ORM工具已经可以做我需要的,或者
- 你能解释一下实体框架如何从视图和存储过程自动生成它的。net类吗?
- 或者如果你能想出另一个解决方案来自动生成类我的场景,这也将是感激的。
表和视图的元数据从系统视图加载:sys.tables
, sys.views
, sys.columns
等
我刚刚测试了EF如何获取列名和类型,它确实执行存储过程并迭代返回的列。它只使用一些复杂的查询来正确地构建调用命令和处理返回值。
如果使用System.Data.SqlClient名称空间,则实际上不需要ORM来执行此操作。下面是一个用于随机查询语句的简单示例:
public static List<string> GetColumns(string connectionString, string queryString)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
SqlDataAdapter adapter = new SqlDataAdapter();
adapter.SelectCommand = new SqlCommand(queryString, connection);
connection.Open();
List<string> columnNames = new List<string>();
SqlDataReader reader = adapter.SelectCommand.ExecuteReader();
for (int xx = 0; xx < reader.FieldCount; xx++)
{
columnNames.Add(reader.GetName(xx));
}
return columnNames;
}
}
这并不能帮助您自动生成类本身。尽管如此,它仍然是提取所需数据的起点。
我知道该怎么做了。我在这里写了一个非常基本的解。