时间:2021-07-01 10:21:17 帮助过:18人阅读
初次接触Abp框架,其框架中封装的操作各类数据的方法还是很好用的,本人还在进一步的学习当中,并将利用abp.NHibernate类库操作PostgreSQL数据的相关方法做一记录,不足之处让评论指点扔砖。
话不多说,直接开干:
1、vs 新建一个项目,(窗体或者控制台程序或者测试程序)
2、NuGet 获取类库(adp.NHibernate)
还需安装一个pgSQl 对应的驱动
3、新建一个继承AbpModule的类,用于配置数据库连接信息和实体映射的相关信息
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Reflection;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Abp.Configuration.Startup;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Abp.Modules;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Abp.NHibernate;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> FluentNHibernate.Cfg.Db;
- </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
- * 命名空间: abpPgtest
- * 功 能: 配置数据库
- * 类 名: NhHibernateModel
- * 作 者: 东腾
- * 时 间: 2018/1/29 17:04:27
- </span><span style="color: #008000;">*/</span>
- <span style="color: #0000ff;">namespace</span><span style="color: #000000;"> abpPgtest
- {
- [DependsOn(</span><span style="color: #0000ff;">typeof</span><span style="color: #000000;">(AbpNHibernateModule))]
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span><span style="color: #000000;"> NhHibernateModel:AbpModule
- {
- </span><span style="color: #008000;">//</span><span style="color: #008000;">重写PreInitialize方法</span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> PreInitialize()
- {
- </span><span style="color: #0000ff;">var</span> pgStr = <span style="color: #800000;">"</span><span style="color: #800000;">Server=localhost;Port=5432;Database=DTDB;User Id=DT;Password=DT</span><span style="color: #800000;">"</span><span style="color: #000000;">;
- </span><span style="color: #0000ff;">var</span> config =<span style="color: #000000;"> Configuration.Modules.AbpNHibernate().FluentConfiguration
- .Database(PostgreSQLConfiguration.Standard.ConnectionString(pgStr));
- config.Mappings(a </span>=><span style="color: #000000;"> a.FluentMappings.AddFromAssembly(Assembly.GetEntryAssembly()));
- </span><span style="color: #008000;">//</span><span style="color: #008000;">base.PreInitialize();</span>
- <span style="color: #000000;"> }
- </span><span style="color: #008000;">//</span><span style="color: #008000;">重写Initialize方法</span>
- <span style="color: #0000ff;">public</span> <span style="color: #0000ff;">override</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> Initialize()
- {
- IocManager.RegisterAssemblyByConvention(Assembly.GetCallingAssembly());
- </span><span style="color: #008000;">//</span><span style="color: #008000;"> base.Initialize();</span>
- <span style="color: #000000;"> }
- }
- }</span>
4、新建实体和实体映射
- <span style="color: #0000ff;">using</span><span style="color: #000000;"> System;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Collections.Generic;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Linq;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Text;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> System.Threading.Tasks;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Abp.Domain.Entities;
- </span><span style="color: #0000ff;">using</span><span style="color: #000000;"> Abp.NHibernate.EntityMappings;
- </span><span style="color: #008000;">/*</span><span style="color: #008000;">*
- * 命名空间: abpPgtest.testModel
- * 功 能: 数据库表实体及映射
- * 类 名: testModel
- * 作 者: 东腾
- * 时 间: 2018/1/29 17:21:19
- </span><span style="color: #008000;">*/</span>
- <span style="color: #0000ff;">namespace</span><span style="color: #000000;"> abpPgtest.testModel
- {
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> testModelMap : EntityMap<testModel><span style="color: #000000;">
- {
- </span><span style="color: #0000ff;">public</span> testModelMap():<span style="color: #0000ff;">base</span>(<span style="color: #800000;">"</span><span style="color: #800000;">dt_tb_test</span><span style="color: #800000;">"</span><span style="color: #000000;">)
- {
- </span><span style="color: #008000;">//</span><span style="color: #008000;">Id(x => x.Id).GeneratedBy.Increment();</span><span style="color: #008000;">//</span><span style="color: #008000;">数据库表中没有自增的Id时需要映射一个Id</span>
- Map(x =><span style="color: #000000;"> x.Company);
- Map(x </span>=><span style="color: #000000;"> x.Name);
- </span><span style="color: #008000;">//</span><span style="color: #008000;">References<userModel>(a => a.Id).Not.LazyLoad().Column("外键ID");</span><span style="color: #008000;">//</span><span style="color: #008000;">数据库中有关联表时使用</span>
- <span style="color: #000000;">
- }
- }
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> testModel:Entity<<span style="color: #0000ff;">int</span>><span style="color: #000000;">
- {
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">int</span> Id { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">string</span> Name { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">virtual</span> <span style="color: #0000ff;">string</span> Company { <span style="color: #0000ff;">get</span>; <span style="color: #0000ff;">set</span><span style="color: #000000;">; }
- }
- }</span>
5、数据库中新建表 dt_tb_test
6、注册并初始化abp连接
- <span style="color: #0000ff;">var</span> bootstrapper = AbpBootstrapper.Create<NhHibernateModel><span style="color: #000000;">();
- bootstrapper.Initialize();
- </span><span style="color: #0000ff;">var</span> resp = bootstrapper.IocManager.Resolve<IRepository<testModel>>();
7、向数据库中添加数据
- <span style="color: #008000;">//</span><span style="color: #008000;">添加数据</span>
- <span style="color: #0000ff;">var</span> model = <span style="color: #0000ff;">new</span><span style="color: #000000;"> testModel
- {
- Name </span>= <span style="color: #800000;">"</span><span style="color: #800000;">东腾</span><span style="color: #800000;">"</span><span style="color: #000000;">,
- Company </span>= <span style="color: #800000;">"</span><span style="color: #800000;">东腾科技</span><span style="color: #800000;">"</span><span style="color: #000000;">
- };
- resp.Insert(model);</span>
打开数据库查看结果:
8、更新数据
- <span style="color: #008000;">//</span><span style="color: #008000;">更新数据</span>
- <span style="color: #0000ff;">var</span> m = resp.Get(<span style="color: #800080;">1</span><span style="color: #000000;">);
- m.Name </span>= <span style="color: #800000;">"</span><span style="color: #800000;">东腾1</span><span style="color: #800000;">"</span><span style="color: #000000;">;
- resp.Update(m);</span>
查看结果
9、查询数据
查询所有的数据
- <span style="color: #0000ff;">var</span> allList = resp.GetAllList();
按照条件进行查询
10、删除数据(可以根据多种方式进行删除,用id或者where条件进行删除)
- <span style="color: #008000;">//</span><span style="color: #008000;">删除数据,更具where条件删除</span>
- Expression<Func<testModel, <span style="color: #0000ff;">bool</span>>> <span style="color: #0000ff;">where</span> = a =>a.Id==<span style="color: #800080;">3</span><span style="color: #000000;">;
- resp.Delete(</span><span style="color: #0000ff;">where</span>);
id为3的一条数据被删除
11、总结:abp.NHibernate只是ABP中对NHIbernate的一个封装,只要正确注册和访问数据库,其余的就是ORM操作数据库,就简单了。其他的关系型数据都用类似的做法即可。
Abp.NHibernate连接PostgreSQl数据库
标签:thread 记录 lazy 实体 postgres name update mes inf