随笔分类 - .NET Solution
.NET Solution
摘要:今天进入ORM工具开发系列的代码生成工具的开发。现在流行的代码生成工具,一般是基于模板的。T4,Code Smith在基于模板的代码生成方面相当流行。ORM工具,需要从不同的数据库中读取元数据,调用代码生成模板,生成代码。 先来看一下代码生成器的界面,边看边说。 界面是采用文章《Management Console 工具管理类软件通用开发框架(开放源码)》中提到的代码框架,加上停靠的Ou...
阅读全文
摘要:LLBL Gen作为一款商业的ORM工具,有强大的ORM设计器,稳定的查询语法。 先来看一下,ORM的基础要素 1 对象和数据库表格的映射 2 查询的实现,对于添加,删除,修改命名,如何映射成数据库的SQL命令 3 多种数据库支持的实现 对象和数据库表格的映射 NHibernate采用的是xml文件存储实体属性与数据库字段的映射关系,之后,...
阅读全文
摘要:最近一段时间一直思考和总结,如何快速,方便灵活的开发.NET平台的ERP/MIS类型软件系统。在此之前,写过一个系列的文章来表达我的理解,一共有以下八篇文章信息化基础建设 总体结构信息化基础建设 开发框架信息化基础建设 窗体开发信息化基础建设 窗体特性信息化基础建设 报表开发信息化基础建设 Repo...
阅读全文
摘要:作为一款优秀的ORM工具,一直享受着LLBL Gen快速代码生成的好处,却很少钻研它的原理,趁项目不忙,研究下LLBL Gen 3.x的模板开发方法。如果不熟悉基础的配置和步骤,请参考文章《优秀的基于模板的代码生成工具Template Studio》。LLBL Gen提供的ORM框架是免费的,源代码也可以从官网获取,ORM设计器需要商业许可。既然是入门,肯定不能太复杂,参考Code Smith的入门资料的例子,生成下面的文件,作为模板代码生成的入门例子。using System; namespace <%=NameSpace %> { /// <summary> ///
阅读全文
摘要:LLBL Gen作为一个优秀的ORM代码生成工具,可以基于模板快速生成应用程序代码。可能你也会推荐T4,Code Smith等模板生成器,但是先别急,先看看这篇文章作为入门教程,再来比较各自的优势和不足。 以第三方的模板Provide common SQL Functions for Microsoft SQL Server为例子,来讲解模板生成的步骤。 设计模板 打开Template St...
阅读全文
摘要:经过多年的积累发展,公司有一套完善的文档管理系统。一开始是用PHP设计的,.NET出来以后,逐步转用.NET重写。经过多年(N>10)的维护和发展,如今客户数量也不少,功能也完善。最近有一些任务是修改这个系统,隐藏一些控件,修改一些布局,一开始以为很容易,但随着任务的进行中,发现一个小功能的修改,也相当的麻烦。 比如,要修改一个控件,根据读取的参数的不同,把它设为隐藏或显示。 举例说明...
阅读全文
摘要:先看应用程序如何应用验证。以SalesOrderHeaderEntity为例子。 常见的三种验证: 1)保存之前的验证,重写ValidateEntityBeforeSave 2) 删除前的验证,重写ValidateEntityBeforeDelete 3) 属性获取值之后的验证,重写ValidateFieldValue 先讲解一个基本的模式,基类中的设...
阅读全文
摘要:以LLBL Gen作为ORM的首选开发工具,在经历几个项目之后,对它的认识又有了新的高度。一方面要对Query API熟练于心,这样写查询语句才会得心应手,另一方面,也在尝试从ORM的实现,源代码分析,扩展方面来了解这个ORM工具,以便在项目出现救急的问题时可以得心应手,临危不乱。 这篇文章介绍LLBL Gen SDK中的内容,关于如何开发LLBL Gen插件的内容。这个Entity...
阅读全文
摘要:经过数个ERP/MIS项目的开发,列举常见的问题与错误,共勉励。 1 界面代码与逻辑代码混淆 在项目的开始,一般都可以做到界面与逻辑的分离,界面只做数据绑定,业务逻辑则实现客户要求的计算。 WinForms中的BindingSource和Web中的ObjectDataSource,可以实现对object绑定到界面控件属性的功能。 这会带来极大的方便,降低程序的维护代价,做到低耦合。举例说明...
阅读全文
摘要:AdventureWorks的存储过程uspGetEmployeeManagers,调用方法如下 DECLARE @return_value int EXEC @return_value = [dbo].[uspGetEmployeeManagers] @EmployeeID = 1 执行的结果所示 在测试工程中,创建如下的测试脚本 [...
阅读全文
摘要:TypeConverter 类,MSDN中的解释是提供一种将值的类型转换为其他类型以及访问标准值和子属性的统一方法。 先看一下例子,能够将字符串翻译成点结构的类型转换器 public class PointConverter : TypeConverter { public override bool CanConvertFrom(ITypeDescriptorC...
阅读全文
摘要:这一节追踪LLBL Gen是如何把实体映射到为数据库操作的SQL语句的。 先来看读取数据库的程序片段 [TestMethod] public void TestFetchSalesOrderHeader() { DataAccessAdapter adapter = new DataAccessAdapter(ConnectionString); ...
阅读全文
摘要:前一篇文章中提到,LLBL Gen对单个表的查询,这里再来分析一下LLBL Gen对多表的操作。 Adapter模式,用到的变量adapter定义为DataAccessAdapter adapter=new DataAccessAdapter (); 主从表的查询,保存和删除 SalesOrder是采购单主表,它下面有明细表SalesOrderDetail,用于记录采购单的物料信息...
阅读全文
摘要:ORM设计工具:Mindscape NHibernate Designer,请安装Mindscape.NHibernateModelDesigner.vsix文件。 它是一个Visual Studio 2010的插件,运行时效果所示 支持Model frist和Database first两种开发模式,如下图所示 Update Model from Database,从数据库...
阅读全文
摘要:NHibernateORM工具使用LLBL Gen 3.1,它内置了NHibernate设计器。从生成的代码来看,它借助于FluentNHibernate这个框架提供的功能,把数据库字段与实体属性的映射移到.NET代码中,映射由ORM设计器来维护。 先看数据库的内容,Agent表定义如下 执行查询命令的结果如下,这一句是为了验证之后写的ORM语句的正确性。 启...
阅读全文
摘要:工作几年后的积累,经历大大小小的数个项目开发,积累了以下几种软件开发的模式和方法。 全部以Northwind数据库为例子,来比较几个开发方式的主要区别和着重点,更详细的内容请参看博客文章。 这里的开发模式,仅仅以代码的书写方式来比较。比如使用LLBL Gen框架,则大部分的时间在开发业务逻辑; 基于ASP.NET应用代码生成器的方式,适合于项目初期,一点点的加表,加字段,与数据...
阅读全文
摘要:做基于LLBL Gen的项目经常会用到的内容,忘记的时候用来查询,分享出来。 1 如何读取指定的表的内容到集合中 DataAccessAdapter adapter = new DataAccessAdapter(); EntityCollection allCustomers = new EntityCollection(new CustomerEntityFactory()); adapter...
阅读全文
摘要:工作多年,接触到大大小小的数个项目,经验多起来,但阻碍进步的因素也多。因为在代码中看到这个功能是如何实现的,下次自己做,也会用到类似的办法,这样减少了思考的时间,进步也会越来越慢。 说一说软件公司为什么要加密程序的源代码。我们都知道.NET平台的目标是将多种语言,编译为同一种格式,不同的编译器将C#/VB.NET之类的符合CLS规范的.NET语言源代码,编译成IL格式,在运行时IL格式的程序时,由...
阅读全文
摘要:一直从事ERP/MIS的开发工作,今天来展现一下菜单设计器的设计,及其用途,并对B/S部分代码开源。 先用EXCEL来展现,需要表达的菜单结构 如图所示,一级菜单是销售,采购,仓库,其下的子菜单是,日记帐,报表,查询,设置,批次过帐。 第三级别的子菜单,以仓库为例 仓库日记帐的明细功能包括进仓,出仓,仓库调整, 仓库查询的明细功能包括,库存结余,物料存货明细,仓库未完订单. 下面来使用菜单设计器,...
阅读全文
摘要:一直从事ERP/MIS开发,总结一下,自己在ERP/MIS开发中,经常用到的应用多线程的两种模式。 先举一个例子,以帮忙回忆起对多线程的印象。CopyFilesProc是实现拷贝文件的一个方法,用多线程调用: Thread simpleThread = new Thread(CopyFilesProc); simpleThread.Name = "CopyFiles"; simpleThr...
阅读全文