zoukankan      html  css  js  c++  java
  • 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/

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


  • 相关阅读:
    大话设计模式---单一职责原则
    大话设计模式---策略模式
    计算机网络(二)
    计算机网络(一)
    栈与队列

    数据库面试题——基本概念
    链表
    【Essential c++】——(三)泛型编程风格
    【转载】学习JAVA WEB的路线
  • 原文地址:https://www.cnblogs.com/wuvist/p/753180.html
Copyright © 2011-2022 走看看