惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园_首页
Microsoft Security Blog
Microsoft Security Blog
云风的 BLOG
云风的 BLOG
B
Blog
The Register - Security
The Register - Security
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
F
Full Disclosure
The GitHub Blog
The GitHub Blog
Recorded Future
Recorded Future
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Blog — PlanetScale
Blog — PlanetScale
Jina AI
Jina AI
美团技术团队
宝玉的分享
宝玉的分享
Hugging Face - Blog
Hugging Face - Blog
阮一峰的网络日志
阮一峰的网络日志
G
Google Developers Blog
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
D
DataBreaches.Net
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
WordPress大学
WordPress大学
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - Franky
The Cloudflare Blog
博客园 - 【当耐特】
U
Unit 42
月光博客
月光博客
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
博客园 - 聂微东
I
InfoQ
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
Cyberwarzone
Cyberwarzone
V
V2EX
S
Securelist
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
S
Security @ Cisco Blogs
PCI Perspectives
PCI Perspectives
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
H
Heimdal Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
The Hacker News
The Hacker News
D
Darknet – Hacking Tools, Hacker News & Cyber Security
T
Tor Project blog

博客园 - Martin XJ

windows2000 蓝色背景 楚留香mv2 楚留香mv cyberarticle Castle.Facilities.WebserviceIntegration Castle Windsor Wcf Facility的配置及调用IChannel的Close - Martin XJ SharpRush中的跨函数事务实现 - Martin XJ - 博客园 SharpRush中的AOP实现 starcraft2 Spring.net的一个小例子 EnterpriseLibrary 数据访问组件windows98不能使用 使用EnterpriseLibrary碰到的问题 好久都没写blog了 MS推荐的命名指南 Sybase DataWindow.net 1.5(Beta) For .Net 发布 IEWebcontrol webctrl_client目录配置 CodeSmith使用心得 mywallop、orkut、gmail的邀请 无法打开Web项目
自己的ORMapping
Martin XJ · 2005-07-28 · via 博客园 - Martin XJ

看着大家都说ORMapping框架,我也来掺和掺和,平时自己闲着没事做一个ORMapping的架构,我给它起名为SharpRush,就是开发C#程序特别快的意思。本人又喜欢打Starcraft,平常在浩方上看人家都是Rush、Rush的,所以就起名叫SharpRush了。
设计思想
1.和微软的System.Data相对应
                    我的                                           对应微软的                 
主要包含:DataCollection(集合类)              DataTable       
                    DataEntity(实体类)                     DataRow
                    DataField(实体类属性)              DataColumn
1.1 DataCollection(抽象类)继承System.Collection.CollectionBase,所有集合类的基类,可以转变为DataTable,DataTable也可以转变为DataCollection。DataCollection可以有子DataCollection
1.2 DataEntity(抽象类),包含实体对数据的增删改查,所有实体类的基类,可以转变为DataRow
1.3 DataField(结构类型),我把数据库的自动和此结构类型相映射。现在大部分的ORMapping框架都是写在XML中,或者是利用Attribute。我是利用结构,我想这一点,速度上面应该比它们快。
里面包含了数据库字段名,字段类型(System.Data.DbType),长度,是否必输,中文显示名称,是否允许编辑,是否可以Insert,是否Update,是否需要模糊查询等
另外我还对它进行了操作符重载,以方便以后的查询。
代码片断:

1.4 有了这些信息,在实体类的保存之前,实体类根据DataField映射信息,自动判断输入是否符合要求。
那么在界面上的大部分验证信息

2.反映关系
2.1.主明细表 实体类中可以包含集合类,当加载实体类时,可以指定是否需要深度加载。需要深度加载时加载实体类中的集合类。
public virtual bool Load()
public virtual bool LoadWithMemberwiseCollection()
保存时也同样:
public virtual bool Save()
public virtual bool SaveWithMemberwiseCollection()

2.2 关系视图
自己定义了一个RelationCollection和RelationBuilder
例如:EmployeeEntity emp=new EmployeeEntity();
DeptEntity detp=new DeptEntity();
RelationBuilder rb=new RelationBuilder(emp,emp.DeptId);
RelationCollection relcol=rb.InnerJoin(dept,dept.DeptId); //可以InnerJoin,LeftOuterJoin,RightOuterJoin
relcol.Load();
访问relcol,可以用relcol[0][emp.EmpName],relcol[0][dept.DeptName]
另外可以根据recol这个集合再InnerJoin
例如:
CompanyEntity com=new CompanyEntity();
recol.InnerJoin(dept.CompanyId,com,com.CompanyId);//进行再度Join

3.查询语法
加载集合数据
EmployeeCollection col=new EmployeeCollection();
EmployeeEntity entity=new EmployeeEntity();
string str="";
str+=entity.EmpName % "Elevenwolf"
col.Load(str); //代码行数是不是很少啊?

保存实体类
EmployeeEntity entity=new EmployeeEntity();
entity.EmpName="Elevenwolf";
entity.Save(); //Save方法有抽象类DataEntity实现。

4.和.net控件绑定
dataGrid1.DataSource=col; //集合类可以直接绑定到控件上
或者:
dataGrid1.DataSource=col.ToDataTable();
这样的话,当dataGrid1改变时,绑定到它上面的DataTable也会跟着变。也就是说集合类也会跟着变。这就充分的利用到了.net控件的优势。

5.和UIMapping的关联
为了更好的提高开发效率,自己做了一套UIMapping,就是说界面上的控件和实体类中的属性相绑定。
那么的话,我们在开发时就不需要写给页面控件赋值的代码了。

6.多数据库支持

7.另外,实现了一些AOP,IoC,Config,Log方面的东东。