犬者
“说了你又不听,听又不懂,懂又不做,做又做错,错又不认,认又不改,改又不服,不服也不说,那叫我怎么办?!”

【电脑】Katze - 简单的.net "ORM"框架

Katze,是德文猫的意思,猫是很懒的……用Katze为偶这个“ORM”命名,是要强调其目的:少打代码。ORM加引号,是因为偶不认为它是真正的ORM,它只是个穿上ORM马甲的SqlHelper……它没有xml配置文件,默认映射类名为表名、属性名为列名。如果不一致,通过Attribute修改。

Katze只支持单数字主键表 (最好还是自增,然后叫做id),不支持各种神奇的关系,只对外键有一定支持。没有缓存机制。企图支持多数据库,但目前只能在MSSQL上跑,还必须是2005版~纯VB.Net开发,只有.net 2.0版本!

呃,如果这样你还有兴趣,就继续看吧:

先来看看如何使用Katze:

1. 定义Model 

<Table(PrimaryKeyName:="index")> _
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?

        Dim MyBlogger As New Blogger
        MyBlogger.nick= "testaccount"
        MyBlogger.Save()

查找主键为100的Blogger,修改其Nick并保存?

        Dim MyBlogger As New Blogger
        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:

        Dim MyBlogger As New Blogger
        UserList.DataSource = MyBlogger.Find("", "[index] desc", 0, 10)
        UserList.DataBind()

是的,Find这个方法定义得很丑陋……纯粹就是拼sql……偶在以后版本会改掉的……

定义多一个Model吧:

<Table(PrimaryKeyName:="index")> _
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:

        Dim MyBlogger As New Blogger
        MyBlogger.FindById(100)
        ArticleList.DataSource = MyBlogger.ReverseFind(GetType(Articles), "[index] desc", 0, 10)
        ArticleList.DataBind()

或者, 

        Dim MyArticles As New Articles
        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以及iBatisNbear等。当然,所谓参考,也就是随便瞅瞅,绝对不能说领悟了它们的精髓然后打造出Katze。

项目主页是在:http://code.google.com/p/katze/

暂时只有源码,没有文档之类的。

56788|.net|Katze|orm
问天 @5/20/2007 2:40:53 PM
View blogs in this category:电脑


犬句 在 5/21/2007 2:02:05 PM 说:

第一次体会到用眼睛来喘气的滋味!
犬里 在 5/21/2007 1:03:28 PM 说:

如果是说动物不是指人的话,没错猫是很懒的啊……
a79v 在 5/21/2007 12:38:26 PM 说:

那个find实在太丑。。。。。。。。。。。。
贤外智音 在 5/20/2007 5:20:14 PM 说:

仅有耐心看完第一行。在此表达一下不满情绪。"猫是很懒的" ??
濯 在 5/20/2007 3:18:40 PM 说:

搞出来了,牛
kat2e 在 5/20/2007 2:54:06 PM 说:

"猫是很懒的" ??说话要凭良心~

Please leave your comment here

 
  名字:
  主页:
  内容:
 

   


Navigation
Blogwind
犬者首页
Contact


个人档案


“说了你又不听,听又不懂,懂又不做,做又做错,错又不认,认又不改,改又不服,不服也不说,那叫我怎么办?!”



Categories
死结(27)
电脑(188)
心情(190)
天影(25)
乱弹(221)
博客(82)
音乐(18)
饕餮(32)
读书(24)
电影(35)
网摘(5)
希望(60)
汕头(10)
经济(12)
苹果(20)
跋涉(17)
玩意(1)



Archive
2009年6月
2009年5月
2009年4月
2009年3月
2009年2月
2009年1月
2008年12月
2008年11月
2008年10月
2008年9月
2008年8月
2008年7月
2008年6月
2008年5月
2008年4月
2008年3月
2008年2月
2008年1月
2007年12月
2007年11月
2007年10月
2007年9月
2007年8月
2007年7月
2007年6月
2007年5月
2007年4月
2007年3月
2007年2月
2007年1月
2006年12月
2006年11月
2006年10月
2006年9月
2006年8月
2006年7月
2006年6月
2006年5月
2006年4月
2006年3月
2006年2月
2006年1月
2005年12月
2005年11月
2005年10月
2005年9月
2005年8月
2005年7月
2005年6月
2005年5月
2005年4月
2005年3月
2005年2月
2005年1月
2004年12月
2004年11月
2004年10月
2004年9月
2004年8月
2004年7月
2004年6月
2004年5月
2004年4月
2004年3月
2004年2月
2004年1月
2003年12月



My Links
5G
bloglines
时尚摄影师奇科的博客
颜如玉
最爱卫斯理

RSS 2.0

Username:
Password:
 Remember me