Katze,是德文猫的意思,猫是很懒的……用Katze为偶这个“ORM”命名,是要强调其目的:少打代码。ORM加引号,是因为偶不认为它是真 正的ORM,它只是个穿上ORM马甲的SqlHelper……它没有xml配置文件,默认映射类名为表名、属性名为列名。如果不一致,通过 Attribute修改。
Katze只支持单数字主键表 (最好还是自增,然后叫做id),不支持各种神奇的关系,只对外键有一定支持。没有缓存机制。企图支持多数据库,但目前只能在MSSQL上跑,还必须是2005版~纯VB.Net开发,只有.net 2.0版本!
呃,如果这样你还有兴趣,就继续看吧:
先来看看如何使用Katze:1. 定义Model
Public Class Blogger
Inherits Entity
<Field(Size:=100, ColumnType:=SqlDbType.NVarChar, ColumnName:="id")> _
Public UserId As Field.Text
<Field(Size:=100, ColumnType:=SqlDbType.NVarChar)> _
Public nick As Field.Text
Public DOB As Field.Smalldatetime
End Class
是的,需要Inherits Entiy, Katze属于丑陋的侵入性ORM。
2. 定义全局ConnHelper
Katze.Entity.DefaultConnHelper = New Katze.MSSqlConnHelper("你的数据库链接字符串")
配置就这两步,剩下的就是使用了:
创建一个新的Blogger?
MyBlogger.nick= "testaccount"
MyBlogger.Save()
查找主键为100的Blogger,修改其Nick并保存?
MyBlogger.FindById(100)
MyBlogger.nick = "newnick"
MyBlogger.Save()
在webform中显示出最新的十个blogger?
Template:
<asp:Repeater ID="UserList" runat="server">
<ItemTemplate>
<li><%#Container.DataItem("nick")%>
</ItemTemplate>
</asp:Repeater>
Code Behind:
UserList.DataSource = MyBlogger.Find("", "[index] desc", 0, 10)
UserList.DataBind()
是的,Find这个方法定义得很丑陋……纯粹就是拼sql……偶在以后版本会改掉的……
定义多一个Model吧:
Public Class Articles
Inherits Entity
<Field(Size:=50, ColumnType:=SqlDbType.VarChar)> _
Public title As Field.Text
Public blogger As Blogger
<Field(ColumnType:=SqlDbType.Text)> _
Public content As Field.Text
Public add_date As Field.DateTime
End Class
显示Blogger主键为100的最新10篇blog标题?
Template:
<asp:Repeater ID="ArticleList" runat="server">
<ItemTemplate>
<li><%#Container.DataItem("blogger.nick")%>写了<%#Container.DataItem("title")%>
</ItemTemplate>
</asp:Repeater>
Code Behind:
MyBlogger.FindById(100)
ArticleList.DataSource = MyBlogger.ReverseFind(GetType(Articles), "[index] desc", 0, 10)
ArticleList.DataBind()
或者,
ArticleList.DataSource = MyArticles.Find("blogger=100", "[index] desc", 0, 10)
ArticleList.DataBind()
嗯, 加紫色的部分就是Katze对外键的有限支持啦~假设说有N个Model,彼此通过外键连来连去……在Template中可以写:
<%#Container.DataItem("blogger.BloggerCategory.Language.DisplayName")%>
之类的,无限.下去~Katze会自动去查询相应的表。
Katze暂时只是一个Prototype,偶企图通过开发它提高一下自己.net功力而已。现在贴出来,只是希望能够得到大家批评以便改进……要是有谁敢拿去用的话……后果自负!
开发Katze的时候,偶主要是参考了Django内置的ORM以及iBatis跟Nbear等。当然,所谓参考,也就是随便瞅瞅,绝对不能说领悟了它们的精髓然后打造出Katze。
项目主页是在:http://code.google.com/p/katze/
暂时只有源码,没有文档之类的。