一、关于模型及领域代码

数据模型来自唯一的ERM文档,通过提供的Kanas.ModelBroker.Exe工具可以编辑和生成Erm文档,不过我还是建议你从以下两个途径获取文档:
1.通过Microsoft Visual Studio.net 2003所带的Visio做数据库建模(数据库模型图),将结果导出为ERX文档(可使用任何一个版本),再通过Kanas.ModelBroker导入,保存为Erm文档。
2.通过SyBase PowerDesigner10.0/11.0建模型,保存为Pdm(Xml格式)文档,然后通过Kanas.ModelBroker导入,保存为Erm文档。
需要说明的是:Kanas.ModelBroker.Dom以及Kanas.ModelBroker.Extension包括一组非常简单的开放式接口,支持导入任何格式的模型文档。虽然Kanas.ModelBroker也支持从数据库Schema导入,但我绝不推荐,因为大多数数据库Schema不包括逻辑关系。

从模型文档导入的Erm文档能够识别一些简单的关系,但是还需要作一些简单的修改才能生成理想的领域模型代码。主要有以下几点:
1.领域说明:对每个实体、每个属性都应该进行领域注释,生成代码后将在代码中包括这些注释,也可以生成相关的Xml文档甚至MSDN风格的文档,在VS.Net还支持自动注释。
2.逻辑关系:导入时大部分引用关系已经析出,但如果有一些关系未被析出的话,可以手工设置。将类型设置为Entity:XXXX(实体引用)或Enum:XXXX(枚举引用)将获得逻辑关系。这些关系不依赖数据库Schema支持。如果被引用的类型为复合关键字(绝不推荐),则需要删除其余的属性并设置好Joining。
3.继承关系:修改实体的Super属性,则可令实体从另外一个实体派生。派生实体的Joining属性将与基类实体的关键属性连接。如果基类实体为复合关键字(绝不推荐),则派生实体的Joining为多个名称(将与数据库字对应)通过逗号分隔。
4.聚合关系:聚合关系是领域相关的,所以不能自动析出,必须手工设置。设置聚合时,只需在引用属性中将Aggregated属性设为领域属性名即可。例如:订单和订单明细项,在订单明细项对订单的引用属性中将Aggregated属性设为Items,则在生成的代码中订单将有一个Item属性,在对该属性首次访问时惰性加载。

通过Erm文档,Kanas.ModelBroker可以自动生成XXX.cs或XXX.vb文档作为领域代码,同时也能够生成Entity.cs或Entity.vb作为领域词典代码。虽然领域词典代码不是必须的,但我还是强烈推荐你使用这个代码。通过领域字典型代码可以获得以下功能:
1.类型化的CreateInstance方法,可以为只读字段设置构造参数。
2.生成强类型查询语句,例如:context.Select(Entity.OrderItem.Order == (Entity.Product.Category == (Entity.ProductCategory.Name == "Fruit"))),甚至包括一些非常复杂的查询。与SQL/HQL这样的脚本语言相比,这些语句是带设计期类型检查的,可避免设计时的低级错误。

Erm文档也可能通过另外一个工具实现与XXX.cs和Entity.cs代码的自动同步。这样在做一些小的改动时不必通过Kanas.ModelBroker来生成。具体过程是:
1.将所有的工具复制到一个固定的文件夹中(例如C:\Program Files\Kanas.Net\Bin),并将该文件夹路径设置到LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\7.1\AssemblyFolders下,令VS.Net2003可以找到这些文档;
2.导入Kanas.ModelBroker.reg到注册器,将Kanas.ModelBroker.VsTool.Dll作为一个COM插件安装到VS.Net中。
3.为项目中的Erm文档的属性设置自定义工具属性:KanasCodeGen。
4.当通过Xml编辑器修改过Erm文件后,相关的代码文档将会自动同步。当然,也可以通过上下文菜单中的“运行自定义工具”来手工同步。

二、关于简单的使用

Kanas.net Framework能够完全地隐藏数据库背景。通过领域代码即可以使用所有的业务操作。不过有两个最基本的概念需要说明:
1.业务上下文(AppContext):业务上下文是一个最基本的对象,不能直接创建,只能通过一个“唯一对象”通过AppContext.GetContext()方法获取。同一个“唯一对象”将获取同一个AppContext实例。在单元测试中,可以通过Guid.NewGuid()方法获取一个“唯一对象”,在Asp.net中可以通过Session.SessionID来获取一个“唯一对象”。AppContext只能通过AppContext.ReleaseContext手工销毁或者随AppDomain的释放或Session的释放自动销毁。
业务上下文将负责业务对象的加载、整个对象缓存(ObjectSpace)及数据库事务。
2.约束子(Constraint):约束子用于描述一组对象,例如符合某个条件的一组对象。约束子可以进行逻辑运算。Kanas.Net的查询都是通过约束子来实现的。不同的数据适配器也通过约束子来实现对象的筛选。当不通过领域词典代码工作时,就必须通过手工构造约束子来实现查询。

这样通过业务上下文及约束子就可以进行以下业务操作了:
1.新建业务对象并保存:
添加一个产品:
Product p = Entity.Product.CreateInstance();
p.Name = "青苹果";
p.Category = context.Select(Entity.Category.Name == "水果类")[0] as Category;
p.Producing = "美国";
p.Comment = "美国青苹果";
context.Attach(p);    // 加入到上下文
context.ApplyTransactions();    // 提交事务
2.修改业务对象并保存:
将产地为“苏联”的产品的产地改为“俄罗斯”:
foreach (Product p in context.Select(Entity.Product.Producing == "苏联"))
{
    p.Producing = "俄罗斯";
}
context.ApplyTransactions();
3.删除业务对象并保存:
删除所有类别已过期的产品:
foreach (Product p in context.Select(Entity.Product.Category == (Entity.ProductCategory.Expiration == true)))
{
    context.Detach(p);
}
context.ApplyTransactions();
4.简单查询:
获取包括今天发运的订单:
IList list = context.Select(Entity.Order.OrderItem == (Entity.OrderItem.ShipDate == DateTime.Now));

最后,通过Kanas.Common提供的ObjectScope可以很快地将查询结果转换到一个DataTable中,并可以提供多种方式的编辑和保存。

转载于:https://www.cnblogs.com/Barton131420/articles/329232.html

Kanas.net Framework 入门介绍相关推荐

  1. Android Framework入门介绍

    Android Framework入门介绍 https://blog.csdn.net/fu_kevin0606/article/details/79532710 framework概述 Androi ...

  2. 第1讲韩顺平 PHP视频教程 zend framework zend介绍 zend快速入门 韩顺平php视频教程ppt 笔记心得

    韩顺平 PHP视频教程  zend framework  PPT笔记心得 本教程贯穿了两个软件公司常用的两个项目,数据采集系统和购物车,共分20讲从本质上深入浅出的分析了zend framework运 ...

  3. [Python爬虫] scrapy爬虫系列 一.安装及入门介绍

    前面介绍了很多Selenium基于自动测试的Python爬虫程序,主要利用它的xpath语句,通过分析网页DOM树结构进行爬取内容,同时可以结合Phantomjs模拟浏览器进行鼠标或键盘操作.但是,更 ...

  4. 分布式事物框架Easy-Transaction--使用入门介绍

    分布式事物框架Easy-Transaction--使用入门介绍 The origin This framework is inspired by a PPT (<大规模SOA系统的分布式事务处理 ...

  5. RESTFUL协议入门介绍

    PHP高级工程师之RESTFUL协议 在这里和大家分享一下在写接口中要遵循的协议,这里我们介绍RESTFUL. 如有不善,多提意见(QQ:1595068971-邮箱:1595068971@qq.com ...

  6. .NET Framework 入门

    官方中文文档链接 官方中文文档 .NET Framework 入门 简单理解下: .NET Framework 是管理面向 .NET Framework 的应用程序的运行时执行环境. 它包括: 公共语 ...

  7. 大数据介绍、集群环境搭建、Hadoop介绍、HDFS入门介绍

    大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 文章目录 大数据介绍.集群环境搭建.Hadoop介绍.HDFS入门介绍 1.课前资料 2.课程整体介绍 3.大数据介绍 3.1 什么是大数 ...

  8. Zend Framework 入门教程(简体中文版)

    Zend Framework 入门教程(简体中文版) Getting Started With the Zend Framework Author:Rob Allen, www.akrabat.com ...

  9. .NET读写Excel工具Spire.Xls使用(1)入门介绍

    原文:[原创].NET读写Excel工具Spire.Xls使用(1)入门介绍 在.NET平台,操作Excel文件是一个非常常用的需求,目前比较常规的方法有以下几种: 1.Office Com组件的方式 ...

最新文章

  1. 一天一个设计模式之建造者模式(Builder)
  2. linux分割图片软件,桌面应用|5 种拆分 Linux 终端的方法
  3. C++中链表的一些操作
  4. Compose 1.0 即将发布,你准备好了吗?
  5. iptables NAT
  6. C#使用NLOG System.TypeInitializationException,类型初始值设定项引发异常
  7. 拓端tecdat|python缺失值处理案例分析:泰坦尼克数据
  8. 从数据库查询数据并输出到前台页面
  9. 【Jsp】第一课 Jsp网络编程的介绍与入门学习
  10. Python requests+BeautifulSoup 采集 安居客_新房信息
  11. SBC音频编解码算法浅析
  12. 计算机类专业都有什么区别?
  13. 阿里云如何设置content-type,微软的在线预览无法使用问题
  14. dream_c梦想标准化语言评估,孩子语言发展落后,诊断治疗需“量体裁衣”
  15. 轮播图特效 html+css+js
  16. 10月各国最新签证及入境政策汇总
  17. MySQL数据库入门(三)--- 查询、权限、join语法、外键、备份
  18. 关于1Byte 1K 1M 1G(换算)
  19. Python学习笔记(飞机大战项目练习)---B站黑马程序员
  20. 有没有测试硬盘的软件,检测硬盘有什么好软件

热门文章

  1. 复练-软考高级-论文写作专题
  2. qt 使用插件astyle_astyle使用基础教程
  3. matlab函数包_Matlab论文插图绘制的270种补充颜色
  4. c++ 命令行错误: 无法打开 元数据 文件_PostgreSQL:强大的开源对象关系数据库管理系统...
  5. 使用 Windows Sysinternals 工具进行故障排除
  6. Oracle从零开始3——复杂查询
  7. python高级应用程序课程设计_Python高级应用程序设计任务
  8. vue 类型字段除了用select框_10个好用的 HTML5 特性
  9. Mybatis的案例和接口代理开发和模板配置
  10. Dubbo入门之hello world(zookeeper做注册中心)