和我一起学CSLA.NET----设计模型及数据访问

简介:

上一节和大家说了些CSLA.NET的一些功能,以及对这些功能提出一些疑问,从这一节开始,我们就带着这些问题,来学习CSLA 框架怎么使用。我并不打算在这里介绍CSLA框架的一些概念,如果你对面向对象这些概念仍然不是很熟悉的话,建议你还是大概看一下作者的书,我们还是采用CSLA.NET来结合实际使用完成一个简单的例子. 
     有很多人是先把数据库建好了再来用CSLA来写业务代码,有的是用Codesmith根据数据库生成。其实说实话这也未尝不可,不管黑猫白猫抓到耗子就是好猫嘛,呵呵,不过我个人认为这并不是最合理的,起码你在设计数据库时也应该考虑一下CSLA的业务对象怎么写,尤其是要考虑这些对象之间的关系实现起来的难易度,否则会使你的CSLA过于复杂。
     为了尽量简单化,例子不会掺杂过多的业务,这样来更多的关注用CSLA.NET来实现的过程。我们就拿订单模型来做吧,先设计出整个领域对象:
      Domain Model
     主要包含订单,订单项,产品三个领域类,在这里暂时不考虑客户,而且我们现在也暂时不考虑权限控制,这部分在后面再加上来。我们对这几个对象再进行细化 :
     Domain Objects
     我想同行们对这样的一个设计都已经相当熟悉了,订单包含订单项的集合,订单项又会关联一个产品(物料),我们尽量少的字段,只保留一些有代表性的,日期,金额,枚举类型的字段。同样的,我们在这里也没有设计业务方法,先不管这些(这并不合理),我们在这个时候也可以把我们的数据库建立起来了(可以通过EA来生成脚本): 

隐藏行号 复制代码 创建表结构脚本
  1. USE [CSLATest]
  2. GO
  3. /****** Object:  Table [dbo].[Product]    Script Date: 02/02/2010 21:25:25 ******/
  4. SET ANSI_NULLS ON
  5. GO
  6. SET QUOTED_IDENTIFIER ON
  7. GO
  8. CREATE TABLE [dbo].[Product](
  9. [ProductID] [nvarchar](50) NOT NULL,
  10. [ItemNo] [nvarchar](20) NOT NULL,
  11. [ItemName] [nvarchar](50) NOT NULL,
  12. CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED 
  13. (
  14. [ProductID] ASC
  15. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  16. ) ON [PRIMARY]
  17. GO
  18. /****** Object:  Table [dbo].[OrderLine]    Script Date: 02/02/2010 21:25:25 ******/
  19. SET ANSI_NULLS ON
  20. GO
  21. SET QUOTED_IDENTIFIER ON
  22. GO
  23. CREATE TABLE [dbo].[OrderLine](
  24. [OrderLineID] [nvarchar](50) NOT NULL,
  25. [OrderID] [nvarchar](50) NOT NULL,
  26. [ProductID] [nvarchar](50) NOT NULL,
  27. [Num] [int] NULL,
  28. [Remark] [nvarchar](50) NULL,
  29. CONSTRAINT [PK_OrderLine] PRIMARY KEY CLUSTERED 
  30. (
  31. [OrderLineID] ASC
  32. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  33. ) ON [PRIMARY]
  34. GO
  35. /****** Object:  Table [dbo].[Order]    Script Date: 02/02/2010 21:25:25 ******/
  36. SET ANSI_NULLS ON
  37. GO
  38. SET QUOTED_IDENTIFIER ON
  39. GO
  40. CREATE TABLE [dbo].[Order](
  41. [OrderID] [nvarchar](50) NOT NULL,
  42. [OrderDate] [datetime] NULL,
  43. [OrderType] [int] NULL,
  44. [EffecDateBegin] [datetime] NULL,
  45. [EffecDateEnd] [datetime] NULL,
  46. [OrderState] [int] NULL,
  47. [Amount] [decimal](18, 0) NULL,
  48. CONSTRAINT [PK_Order] PRIMARY KEY CLUSTERED 
  49. (
  50. [OrderID] ASC
  51. )WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
  52. ) ON [PRIMARY]
  53. GO

     

接下来,我们必须要做一个选择,那就是CSLA.Net的数据访问使用什么实现,之前的版本一般都是使用存储过程,Sql语句,还有的使用开源的ORM,比如NHibernate等,现在使用Linq的比较多,不过个人认为Linq to Sql或者EF和CSLA.Net还是有重叠的部分,使用时就会涉及到Linq的对象与CSLA业务对象属性的映射的问题,(不过即使你使用存储过程,你也要处理DataSet或者DataReader与你的对象的转换).我们同样也使用Linq To Sql来实现数据门户, 在这个例子中我们并不打算象官方Demo那样使用存储过程来实现业务逻辑,而是都由Linq to Sql来实现.
     先建立起我们的Linq项目CSLADemo.DalLinq,在这里需要进行一下设置,工具--选项--数据库工具--O/R Designer--名称的复数形式设置为True.然后拖动我们的三个表,并根据我们的模型建立他们之间的关联关系,当然,你也可以在数据库表中建立外键,那样的拖动的话这样的关系就会自动生成。
     2010-2-3 13-58-54

     注意我们Order与OrderLine之间,是一对多关系,双向生成属性,OrderLine与Product之间一对多,Product不需要生成属性。
     我们说一下Linq的一些题外话,其实Linq这个设计器就是比较典型的DSL+T4的例子,dbml文件主要是描述元数据文件,CSLADemo.designer.cs文件就是T4模板结合元数据生成的目标代码,我们甚至可以控制这个步骤,通过自己的模板文件,将目标代码生成的单独的类里面,而不是象现在这样,将所有的代码都生成都一个类里,不过这在我们这个例子里是没有必要的,因为我们并不打算去扩展linq to sql生成的代码,而只是简单的使用就足够了。
     另外还有一点需要提的就是,在这里建立的对象与对象的关系其实也是很关键的,在后面我们可以看到,我们在CSLA对象中其实是利用这些关系来加载相关联的对象,也就是通过Linq对象来实现的。
    
    到现在为止我们还没有介绍直接与CSLA相关的东西,不过我们已经完成了整个环境的准备,以及数据访问的完成,下一节我们来介绍CSLA的具体使用.

作者:孤独侠客似水流年
出处:http://lonely7345.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: .NET

本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2010/02/03/1662776.html,如需转载请自行联系原作者
目录
相关文章
|
1月前
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
mvc.net分页查询案例——DLL数据访问层(HouseDLL.cs)
9 0
|
2天前
|
机器学习/深度学习 存储 计算机视觉
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-4
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
32 11
|
2天前
|
机器学习/深度学习 算法 数据可视化
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-3
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
10 0
|
2天前
|
算法 数据可视化
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现-1
r语言中对LASSO回归,Ridge岭回归和弹性网络Elastic Net模型实现
17 0
|
8天前
|
算法
r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现
15 1
|
8天前
|
算法
r语言中对LASSO,Ridge岭回归和Elastic Net模型实现
r语言中对LASSO,Ridge岭回归和Elastic Net模型实现
12 0
|
15天前
|
机器学习/深度学习 数据挖掘 Go
中科院二区7.4分|NET基因肿瘤分型+生存预后模型+分子对接
在《Journal of Translational Medicine》上发表的最新研究中,科学家们鉴定了一种新的NET相关基因签名,用于预测弥漫性大B细胞淋巴瘤(DLBCL)患者的预后。他们发现8个基因(PARVB,LYZ,PPARGC1A,HIF1A,SPP1,CDH1,S100A9和CXCL2)与DLBCL生存率显著相关,建立了NRG遗传风险模型,该模型可能有助于指导DLBCL的治疗选择。研究包括基因表达数据的分析、预后特征的构建和验证,以及与免疫微环境和潜在治疗靶点的相关性探索。
17 0
|
1月前
|
SQL 数据库
使用ADO.NET查询和操作数据
使用ADO.NET查询和操作数据
9 0
|
2月前
|
机器学习/深度学习 编解码 并行计算
SegNetr来啦 | 超越UNeXit/U-Net/U-Net++/SegNet,精度更高模型更小的UNet家族
SegNetr来啦 | 超越UNeXit/U-Net/U-Net++/SegNet,精度更高模型更小的UNet家族
44 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0