本文适用于刚接触AgileEAS.NET的开发,且需要进行数据库访问的开发人员及学生。
开发环境:VS2013
数据库:Microsoft SQL Server 2008R2
1 数据库登录,记住登录用户及密码,本例以本机的数据库作为服务器,登录及登录后如下图。
2 数据库登录完成后再来分析DrugShop工程里如何连接到数据库。
1> 从工程的执行入口开始,首先是DrugShop.Main项目下的APP.config配置数据库连接设置(如服务器地址、数据库名、服务器登录名及密码等参数设置)。运行源码的过程中出现数据库连接问题可参照已下代码检查各参数的配置;
<objects>
<!--DbProvider:为数据库和DataAccessor提供接口;通过property属性来定义要连接的服务器地址、数据库名、登录名及密码等信息-->
<object name="DbProvider" assembly="EAS.Data" type="EAS.Data.Access.SqlClientDbProvider" LifestyleType="Thread">
<property name="ConnectionString" type="string" value="Data Source=127.0.0.1;Initial Catalog=drugshop;Integrated Security=false;User ID=sa;Password=sa;Connect Timeout=30" />
</object>
<!--数据访问器:通过DataAccessor(在BaseServiceObject继承类的定义里调用)访问数据库的相应数据-->
<object name="DataAccessor" assembly="EAS.Data" type="EAS.Data.Access.DataAccessor" LifestyleType="Thread">
<property name="DbProvider" type="object" value="DbProvider"/>
<property name="Language" type="object" value="TSqlLanguage"/>
</object>
<!--ORM访问器:ORM将数据库的字段与编程语言(如C#)之间建立对应关系,可以很好地在编程语言环境下对数据库进行读取(在DrugShop.Entities中Generate文件夹下)-->
<object name="OrmAccessor" assembly="EAS.Data" type="EAS.Data.ORM.OrmAccessor" LifestyleType="Thread">
<property name="DataAccessor" type="object" value="DataAccessor"/>
<!--<property name="DataNotifier" type="object" value="DataNotifier"/>-->
</object>
<!--数据通知程序-->
<!--<object name="DataNotifier" assembly="EAS.Data" type="EAS.Data.ORM.SocketBusDataNotifier" LifestyleType="Singleton">
<property name="MessageBus" type="object" value="MessageBus"/>
</object>-->
<!--消息总线-->
<!--<object name="MessageBus" assembly="EAS.MicroKernel" type="EAS.Sockets.Bus.SocketBus" LifestyleType="Singleton">
<property name="Url" type="string" value="socket.tcp://127.0.0.1:6606/"/>
</object>-->
<!--查询语言-->
<object name="TSqlLanguage" assembly="EAS.Data" type="EAS.Data.Linq.TSqlLanguage" LifestyleType="Thread"/>
2> 在C#工程里对数据库里需要用到的表里的字段进行映射(ORM技术),在DrugShop.Entities中Generate文件夹下个.cs文件里完成。在Generate文件夹下的每个文件里都会指定某个Table及Table下的每个字段,以便程序调用。
3> 在DrugShop.BLL.Contracts项目里将定义对数据库访问的各接口函数,在DrugShop.BLL.Host项目下完成上述各接口的具体实现方法。实现方法里对数据库里采集的数据的处理主要采用Linq to SQL语言,与标准的SQL语言有所不同,具体不同请参考相关博客。在DrugShop.BLL.Host项目下的每个类都继承自BaseServiceObject,此类是为了提供一个访问数据库的实例。以方法GetDrugChangePriceList为例说明参考注释。
public IList<CPrice> GetDrugChangePriceList(string backCause, string keyWord, DateTime startTime, DateTime endTime)
{
//根据APP.config的设置读取目标数据库的表CPrice里的全部数据,并赋值给query
DataEntityQuery<CPrice> query = DataEntityQuery<CPrice>.Create();
//通过LINQ To SQL语言进行数据的删选,将按条件删选后的数据表返回到IList
var p = (from item in query
where (backCause.Trim().Length == 0 || item.Cause.Contains(backCause.Trim()))
&& (keyWord==string.Empty || item.InputCode1.StartsWith(keyWord))
&& item.EventTime>=startTime
&& item.EventTime<=endTime
orderby item.EventTime descending
select item);
return p.ToList();
}
4> 在DrugShop.WinUI里就可以调用接口来读取数据库的数据,具体调用方法如下例:
this.backList= ServiceContainer.GetService<IDrugBackService>().GetDrugCustomBackList(this.tbCustomName.Text.Trim(),this.tbSeach.Text, this.dtpStart.Value, this.dtpEnd.Value);
药店管理系统运行界面如下图。
至此,从数据库读取数据到可被操作的List变量的连接过程就结束了。欢迎各位指错。