首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

从NHibernate元数据中获取类字段名称和表列名称

从NHibernate元数据中获取类字段名称和表列名称,可以通过以下步骤实现:

  1. 获取NHibernate的ISessionFactory实例。
  2. 通过ISessionFactoryGetClassMetadata()方法获取IClassMetadata实例。
  3. 通过IClassMetadataPropertyNames属性获取类字段名称数组。
  4. 通过IClassMetadataTableName属性获取表名。
  5. 通过IClassMetadataGetColumnNames()方法获取表列名称数组。

以下是一个示例代码:

代码语言:csharp
复制
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Mapping;
using System;

namespace NHibernateExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配置NHibernate
            Configuration config = new Configuration();
            config.Configure();
            config.AddAssembly(typeof(Program).Assembly);

            // 获取ISessionFactory实例
            ISessionFactory sessionFactory = config.BuildSessionFactory();

            // 获取IClassMetadata实例
            IClassMetadata classMetadata = sessionFactory.GetClassMetadata(typeof(MyEntity));

            // 获取类字段名称数组
            string[] propertyNames = classMetadata.PropertyNames;
            Console.WriteLine("类字段名称:");
            foreach (string propertyName in propertyNames)
            {
                Console.WriteLine(propertyName);
            }

            // 获取表名
            string tableName = classMetadata.TableName;
            Console.WriteLine("表名:" + tableName);

            // 获取表列名称数组
            string[] columnNames = classMetadata.GetColumnNames();
            Console.WriteLine("表列名称:");
            foreach (string columnName in columnNames)
            {
                Console.WriteLine(columnName);
            }
        }
    }
}

在上面的示例代码中,我们通过Configuration对象配置了NHibernate,并使用BuildSessionFactory()方法获取ISessionFactory实例。然后,我们使用ISessionFactoryGetClassMetadata()方法获取IClassMetadata实例,并通过IClassMetadataPropertyNames属性获取类字段名称数组,通过IClassMetadataTableName属性获取表名,通过IClassMetadataGetColumnNames()方法获取表列名称数组。最后,我们将这些信息输出到控制台。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

如何从jdbc中获取数据库建表语句信息(表字段名称表字段类型表字段注释信息表字段长度等等)

* 如何从jdbc中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等) * 1,表字段名称 * 2,表字段类型 * 3,表字段注释信息 这里介绍3种方式,如下:...第二种方式:直接从jdbc数据库连接Connection实例中获取 三种方式获取的数据有一些区别 第一种方式不能获取到的信息比较丰富,但是唯一不能获取的是表字段备注信息,其他信息基本都有了 第二种方式可以获取完整的建表语句...,但是不太好用,需要自己解析表字段,如果自己可以解析的话,建议使用 第三种方式能够获取到表字段备注信息,但是获取不到表字段对应的java类型 do not talk,show me code. package...中获取数据库建表语句信息(表字段名称/表字段类型/表字段注释信息/表字段长度等等) * 1,表字段名称 * 2,表字段类型 * 3,表字段注释信息 */ @Slf4j public class How2ObtainFieldInfoFromJdbc...create table user_pop_info how2ObtainFieldInfoFromJdbc.method2(); // 第二种方式:直接从jdbc数据库连接Connection实例中获取

4.8K10
  • NHibernate详解

    NHibernate 为你处理这些,远胜于你不得不写SQL去从数据库存取对象。你的代码仅仅和对象关联,NHibernat 自动产生SQL语句,并确保对象提交到正确的表和字段中去。...这里我们将映射类型名称(类名,装配件)到我们数据库中的User表,这里和Hibernate有一点点的不同。你将不得不告诉NHibernate从何处提取对象。...在这个例子里我们从装配件(最后编译的DLL文件名称)NHibernate.Examples 装载类NHibernate.Examples.QuickStart.User 。...简要看一下,你将发现NHibernate所要做的工作。name属性的值正是我们.Net 类的属性,column属性值将是我们数据库里的字段。...如果你执意要NHiberante为你生成主键,你感兴趣于设定uuid.hex和uuid.string(从文档中获取更多信息) 提示:如果你使用Visual Studio.Net 去编译的话,请将user.hbm.xml

    71030

    NHibernate学习笔记之一,Hello world!

    NHibernate是一个面向.NET环境的对象/关系数据库映射框架,主要应用在数据持久层,和其它的ORM框架一样用来把对象模型表示的对象映射到基于SQL的关系模型数据结构中去。...;mapping表示映射NHibernateDemo.WebUI命名空间下的所有类型,包含持久化类以及对应映射文件所在的应用程序集名称。...3、编写实体类(POCO,Plain Old CLR Objects),映射文件包含POCO类映射到一个或者多个数据库表的元数据信息。User.cs文件如下所示。...4、为POCO类编写写一个数据库映射文件,其实User.hbm.xml映射文件包含了对象/关系映射(ORM)所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。...、定义NHibernateHelper的帮助类,Isession是NHibernate的工作单元,它是一个持久化管理器,我们通过ISession来从数据库中存取数据。

    61120

    NHibernate总结

    NHibernate不仅仅管理.NET 类到数据库表的映射(包括.NET 数据类型到SQL 数据类型的映射),还提供数据查询和获取数据的方法,大幅度减少我们开发时人工使用SQL和ADO.NET处理数据的时间...,其中People实体类中的字段要设置为virtual。每个文件的详细代码在下面介绍 (2)     在NH.Data层引用Nhibernate相关的DLL ?...首先,我们要从ISessionFactory中获取一个ISession(NHibernate的工作单元)。ISessionFactory可以创建并打开新的Session。...virtual,要不然会报错 (4)     下面我们开始为People实体类进行数据库表映射配置People.hbm.xml NHibernate要知道怎样去加载和存储持久化类的对象。...这正是NHibernate映射文件发挥作用的地方。映射文件包含了对象/关系映射所需的元数据。元数据包含持久化类的声明和属性到数据库的映射。

    94040

    使用动态SQL(七)

    此列元数据包括ODBC数据类型信息,以及客户端类型和InterSystems Objects属性的起源以及类类型信息。...%SQLQuickLoad这将返回所选字段的两个表列表。第一列元数据表列出了列定义信息:显示标题%SQL.StatementColumn属性描述Column NamecolName列的SQL名称。...如果SELECT项是子查询,则不会列出任何架构名称。CTypeclientType客户端数据类型的整数代码。第二列元数据表列出了扩展列信息。...12: RowIDisRowIdROWID和Identity字段返回Y.扩展列信息元数据表列出了每个选定字段的列名称(SQL名称或列别名),链接属性(链接的持久性类属性)和类型类(数据类型类)。...SET i=i+1 } WRITE "End of metadata"}执行Execute之后,无法从查询结果集元数据中获取参数元数据。在结果集中,所有参数均已解析。

    85420

    C# 数据操作系列 - 12 NHibernate的增删改查

    前言 上一篇《C# 数据操作系列 - 11 NHibernate 配置和结构介绍》 介绍了Nhibernate里的配置内容。这一篇将带领大家了解一下如何使用NHIbernate。...assembly:指定映射对象所在的assembly,一般情况指的是项目名称 namespace:所在命名空间 default-access:可选的,默认是property,表示NHibernate的读取数据列的策略...,默认情况从Property 中读取 default-lazy:可选的,默认是true,是否启动延迟加载 1.2 class的配置 一般情况下,class节点只需要指定name和table就可以了。...1.2.1 id 任何一个映射都必须声明一个数据表的主键,大多数类也必须有一个唯一标示字段用来区分不同的实例。...column:对应数据表的列名 type:数据库中的类型 1.2.3 many-to-one 在Nhibernate中,多对一的配置是在一的一端,表示该类有一个外键导航。

    1.1K20

    NET中小型企业项目开发框架系列(一个)

    当时的前端,我们开发了基于Net一组结构sprint.NET+NHibernate+MVC+WCF+EasyUI等中小型企业级系统开发平台,如今把整个开发过程中的步步进展整理出来和大家分享,这个系列可能有点长...界面层: ComplaintManageSystem:基本的MVC和LigerUI实现的界面部分 TZHSWEET.UI:关于MVC公共UI定义的部分 公共类库部分: 我们的目标是“0”增删改查的数据訪问层实现...,主要是靠Nhibernate的定义通用的增删改从,然后其它类继承增删改查接口和对应的自己定义的子类的接口,实现拓展 首先,我们从曾经的写代码经验知道,我们的Dao主要是做增删改查等方面,我们就先定义一个公共方法的接口叫做...仅仅须要传入Name属性的名称和值就可以; //这个Name是相应的实体的属性名称,非数据库字段名。...非数据库字段名。

    58610

    NHibernate 缓存

    , 只有第一次调用 Get 方法加载实体类时, 有 sql 输出, 从数据库取出了数据, 第二次加载则没有 sql 数据, 也就是利用了 session 的一级缓存。..., 才从数据库加载, 也就是说, Load 方法是延迟加载的。...[Categories] this_ 二级缓存选项 NHibernate 二级有几个配置选项, 他们分别是: 实体类以及集合二级缓存配置选项 指定类: 类名称"...,但不从二级缓存读数据 Get:从二级缓存读数据,仅在数据更新时向二级缓存写数据 Normal:默认方式。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过在配置文件设置 cache.use_minimal_puts从数据库中读取数据时,强制二级缓存刷新 CacheRegion

    60911

    使用VS2015和Nhibernate实现与MySql数据库连接,实现增删改查操作

    ,MySQL-FRONT ,Connector/Net(选择.Net&Mono) Nhibernate包可以在VS2015中下载 ,对MySql操作,我用的是MySQL-FRONT,注意要想实现和数据库的链接...先写一个简单的给你定义的数据库中添加一条元素的代码:(不使用Nhibernate的) 前提:先把该用的dll文件,添加到引用里面去不然,会连接不成功,之前下载的Connector/Net(选择.Net&...,新建一个数据库,名字随意,添加一个表,名字随意,然后添加两个字段,一个字段名称为name,一个为age,好了表建好之后,我们开始使用很简单很简单一个C#连接MySql数据库的代码 using System...然后我们在工程下面新建两个文件夹:Model文件夹用来存放数据库表类和映射类,还有一个Manger类用来存放对数据库执行增删改查操作的类。...帮助类,使用Nhibernate连接数据库,用来得到sessionFactory,然后使用sessionFactory里面的session去操作数据库,代码如下: using System; using

    1.4K30

    C# 数据操作系列 - 11 NHibernate 配置和结构介绍

    NHibernate通过ADO.NET 建立访问数据库的连接,然后封装了一个Transaction(事务)工厂和一个Session工厂。...ISession - NHibernate.ISession: 一个单线程、短生命周期的对象,表示从应用程序和数据持久化之间一个连接。...状态分为以下三种: transient 暂存的、临时的 该状态的对象并没有被持久化上下文捕获到,简单来讲就是刚被创建,还没有从数据库/持久化上下文中获取到主键信息。...这种状态通常是从数据库中获取到数据或者新建的数据附加到了上下文中。 detached 游离态 该状态的对象是从上下文中分离出来的,有了数据库主键,曾经或现在仍然有一条数据库记录与之对应。...数据库连接字符串的名称,指的是配置在程序的配置文件中 connectionStrings节点的数据连接字符串。

    1.3K20

    记录

    在访问相应字段之前,不会评估记录中的值。 记录中的值最多被评估一次。 表达式的结果是一个带有空元数据记录的记录值。...记录中字段的顺序由它们在record-initializer-expression 中出现的顺序定义。 指定的每个字段名称在记录中都必须是唯一的,否则会出错。名称使用顺序比较进行比较。...相同的两条记录在获取字段时会产生不同的结果: 复制 Record.FieldNames([ x = 1, y = 2 ]) // [ "x", "y" ] Record.FieldNames([ y...表的类型决定了表中所有行的长度、表列的名称、表列的类型以及表键的结构(如果有)。 表没有文字语法。提供了几个标准库函数来构造二进制值。...例如,#table可用于从行列表列表和标题名称列表构造表: 复制 #table({"x", "x^2"}, {{1,1}, {2,4}, {3,9}}) 上面的例子构造了一个包含两列的表,两列都是type

    50510

    NHibernate 缓存

    , 只有第一次调用 Get 方法加载实体类时, 有 sql 输出, 从数据库取出了数据, 第二次加载则没有 sql 数据, 也就是利用了 session 的一级缓存。..., 才从数据库加载, 也就是说, Load 方法是延迟加载的。...[Categories] this_ 二级缓存选项 NHibernate 二级有几个配置选项, 他们分别是: 实体类以及集合二级缓存配置选项 指定类: 类名称"...,但不从二级缓存读数据 Get:从二级缓存读数据,仅在数据更新时向二级缓存写数据 Normal:默认方式。...从二级缓存读/写数据 Refresh:向二级缓存写数据,想不从二级缓存读数据,通过在配置文件设置cache.use_minimal_puts从数据库中读取数据时,强制二级缓存刷新 CacheRegion

    44410

    C# 数据操作系列 - 10 NHibernate初试

    在后续使用中,通过映射关系生成SQL语句(这一步跟EF是一致的),进而操作数据或者查询数据。 2. 初探 NHibernate 2.1 准备 先来个控制台项目,我起名为dataprovider。...C# 项目中,除了Web类型的项目,每个项目的主配置文件的名称都是App.config,这是一个固定名称。 文件内容如下: NHibernate"/> 这段代码的含义是,在config文件中添加一个 hibernate-configuration结点,结点的解析由类:NHibernate.Cfg.ConfigurationSectionHandler...2.3 获取ISessionFactory 然后获取一个ISessionFactory: Configuration cfg = new Configuration(); var sessionFactory...sessionFactory用来创建一个访问数据库的Session 2.4 增删改查 先来个简单的示例类: public class Cat { public virtual string Id

    86330

    C#基础深入学习01

    数组 Array 类的属性 下表列出了 Array 类中一些最常用的属性: 序号 属性 & 描述 1 IsFixedSize 获取一个值,该值指示数组是否带有固定大小。...params 的使用格式为: public 返回类型 方法名称( params 类型名称[] 数组名称 ) 结构体(Struct) 在 C# 中,结构体是值类型数据结构。...在 C# 中的结构与传统的 C 或 C++ 中的结构不同。C# 中的结构有以下特点: 结构可带有方法、字段、索引、属性、运算符方法和事件。 结构可定义构造函数,但不能定义析构函数。...类 vs 结构 类和结构有以下几个基本的不同点: 类是引用类型,结构是值类型。 结构不支持继承。 结构不能声明默认的构造函数。 结构体的构造函数中,必须为结构体所有字段赋值,类的构造函数无此限制。...结构体中声明的字段无法赋予初值,类可以。

    16910

    MySQL笔记

    它的主要功能包括数据定义、数据操作、数据库的运行管理、数据库的建立和维护等几个方面 数据库类型 关系型数据库 关系型数据库是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据...,添加外键 create table 表名( 外键列名 类型 constraint 外键名称 foreign key (从表列名称) references 主键名称(主表列名称) ) 删除外键...(外键字段名称) references 主表名称(主表列名称) 级联操作 添加级联操作 alter table 表名 add constraint 外键名称 foreign key (外键字段名称...int:代表列的编号,从1开始 String:代表列名称 PreparedStatement:预编译执行sql的对象 参数使用**?...,可以放在任意目录下 加载配置文件:Properties 通过工厂类来获取数据库连接池对象: DruidDataSourceFactory.createDataSource(数据源) 获取连接:getConnection

    99710

    20个代码生成框架

    它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。...,并生成Bean类和对应的配置文件。...它允许您使用象 JavaDoc 标记之类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后,它利用这些额外的元数据来生成诸如部署描述符和源代码之类的相关文件。...XDoclet 继承了 JavaDoc 引擎的思想,允许根据定制 JavaDoc 标记生成代码和其他文件。当然,XDoclet 也可以访问整个解析树。这样,它就可以访问类、类的包结构和类的方法。...内容标记打印当前解析树上下文的片段,如类名称、方法名称和参数,等等。

    4.6K50

    20个代码生成框架 (.NET JAVA)

    它可以帮助ASP、JSP、PHP开发人员快速的开发简单的数据库维护程序。无需任何编码,只需将数据库结构导入到CodeMaker中并做简单的设置,CodeMaker即可生成完整的数据库操作页面。...,并生成Bean类和对应的配置文件。...它允许您使用象 JavaDoc 标记之类的东西来向诸如类、方法和字段之类的语言特征添加元数据。随后,它利用这些额外的元数据来生成诸如部署描述符和源代码之类的相关文件。...XDoclet 继承了 JavaDoc 引擎的思想,允许根据定制 JavaDoc 标记生成代码和其他文件。当然,XDoclet 也可以访问整个解析树。这样,它就可以访问类、类的包结构和类的方法。...内容标记打印当前解析树上下文的片段,如类名称、方法名称和参数,等等。

    4.1K60

    iBatis.Net(5):Data Map(了解)

    ,我觉得您一定会觉得略微猥琐的爱上它的,哦,突然想起来,有朋友在我上一篇的留言里说,让我把iBatis.Net和nhibernate对比的写一下,我如果有时间,会写一些关于nhibernate的文章的,...当然,我这里为了方便,就使用了相同的字段名称,当然您完全可以不这么做,包括类的名称也是,继续看下去就明白了, 我们创建一个叫做Test.xml的文档 数据的实体类型,就是我们一开始定义的那个Customers列,因为这个类的属性都是与数据表中的列名和数据类型对应的,所以可以正常的实例化一个个的...,并且已经在很多地方使用,这个时候更改它是绝对不可能的啦,但是我们数据库中的列名与数据实体类中的属性名称却不对应,这个时候,我们就需要借助一个resultMap的东西,我们把上面定义的Customers...我们没有使用resultClass直接指定一个实体类,而是指定了一个我们定义的名为Customer的resultMap,在这个resultMap中,我们定义了所有返回列和所有数据实体类中属性的映射关系,

    76260
    领券