wuvist

Katze - 简单的.net "ORM"框架

 原文网址: http://www.blogwind.com/Wuvist/56788.shtml

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"010)
        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"010)
        ArticleList.DataBind()

 

或者, 

        Dim MyArticles As New Articles
        ArticleList.DataSource 
= MyArticles.Find("blogger=100""[index] desc"010)
        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/

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


posted on 2007-05-20 14:49 问天 阅读(2898) 评论(15)  编辑 收藏

评论

#1楼  2007-05-20 21:32 Flykye [未注册用户]

呵呵。。拿来瞧瞧还是不错的。。。新手拿来体验体验ORM也是不错滴。。。   回复  引用    

#2楼  2007-05-20 23:23 沧海依粟      

希望博客园可以多出点关于3.0中自带的ORM的文章.毕竟新出的东西.值得学习.   回复  引用  查看    

#3楼  2007-05-21 02:32 roydux [未注册用户]

C#实体辅助生成工具:


http://www.leadnt.org/leadnt.rar   回复  引用    

#4楼  2007-05-21 09:07 大石头      

嗯,楼主还需要一个代码生成工具   回复  引用  查看    

#5楼 [楼主] 2007-05-21 09:12 问天      

偶的确有代码生成工具分析数据库自动各种model~在google code里面的svn里面有……
只是觉得即便没有这个工具,手写一下model定义也是蛮简单的,就没有blog出来了……:)   回复  引用  查看    

#6楼  2007-05-21 10:00 xiao_p      

喜欢这种态度,做什么东西未必就一定要多么多么高深,只要自己喜欢,对自己有用就好!!!   回复  引用  查看    

#7楼  2007-05-21 22:44 YAO.NET℡      

要支持.
  回复  引用  查看    

#8楼  2007-05-21 22:46 YAO.NET℡      

怎么不写成C#呀
  回复  引用  查看    

#9楼 [楼主] 2007-05-21 22:49 问天      

因为偶个人喜欢vb.net……
就是讨厌c 风格的{}~

:)

另外,有些东西,似乎vb.net能够更方便的处理……比方说,vb.net的implicit type casting……在c#里面就不行了……   回复  引用  查看    

#10楼  2007-05-22 07:08 金色海洋(jyk)      

收藏   回复  引用  查看    

#11楼  2007-05-22 11:23 嗨嗨 [未注册用户]

哈哈
我做了个类似的东东
不过是C#地,根楼主神合,哈哈   回复  引用    

#12楼  2007-05-22 12:25 问天      

哦?
不如,楼上的把你做的也放出来,大家一起切磋切磋?   回复  引用  查看    

#13楼  2007-06-16 20:34 随风流月      

@沧海依粟
这是 .Net Framework 3.5 中的新功能,LINQ。   回复  引用  查看    

#14楼  2007-06-22 12:51 秋风      

我vb不行看不通哦
  回复  引用  查看    

#15楼  2008-08-11 18:21 冯尔斌      

呵呵,“不支持各种神奇的关系” 写的挺逗!   回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2007-05-20 15:50 编辑过
 
 


<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

导航

统计

与我联系

搜索

 

常用链接

留言簿(12)

我参与的团队

随笔档案

积分与排名

最新评论

阅读排行榜

评论排行榜