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

推荐订阅源

U
Unit 42
N
News and Events Feed by Topic
S
Schneier on Security
G
GRAHAM CLULEY
Scott Helme
Scott Helme
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
GbyAI
GbyAI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
C
CERT Recently Published Vulnerability Notes
T
The Exploit Database - CXSecurity.com
C
Cisco Blogs
T
The Blog of Author Tim Ferriss
Cisco Talos Blog
Cisco Talos Blog
P
Privacy & Cybersecurity Law Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
博客园 - 司徒正美
Blog — PlanetScale
Blog — PlanetScale
Project Zero
Project Zero
MyScale Blog
MyScale Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Apple Machine Learning Research
Apple Machine Learning Research
小众软件
小众软件
The Last Watchdog
The Last Watchdog
Vercel News
Vercel News
The Cloudflare Blog
C
Check Point Blog
Help Net Security
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
云风的 BLOG
云风的 BLOG
M
MIT News - Artificial intelligence
Stack Overflow Blog
Stack Overflow Blog
腾讯CDC
NISL@THU
NISL@THU
S
Security @ Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
S
SegmentFault 最新的问题
MongoDB | Blog
MongoDB | Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
T
Threatpost
AWS News Blog
AWS News Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
S
Securelist
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
Vulnerabilities – Threatpost
S
Secure Thoughts

博客园 - 问天

开发笔记1: 范型 C#范型不会用,求助~ Web安全,以新浪微博“郭美美”蠕虫为例 介绍两个Python web框架:Django & Tornado 扯一下抽象 跟赵姐夫扯 webform的设计 MoSonic:对SubSonic的分布式存储、缓存改进尝试(4) MoSonic:对SubSonic的分布式存储、缓存改进尝试(3) MoSonic:对SubSonic的分布式存储、缓存改进尝试(2) MoSonic:对SubSonic的分布式存储、缓存改进方案尝试(1) Discuz!NT在64位Windows下运行的问题 说说分页 iPhone Web App开发杂感 基于Gettext的asp.net网站多语言解决方案 Django on IronPython and Windows 动态修改.Net StreamReader Encoding编码 恐怖的迅雷 TinyMCE 的音乐插件/mp3 music insert plugin 微软是如何输掉API之战(下)
Katze - 简单的.net "ORM"框架
问天 · 2007-05-20 · via 博客园 - 问天

 原文网址: 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.SmalldatetimeEnd 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.DateTimeEnd 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/

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