Subsonic: Code-First开发模式

一直以来都在使用数据驱动的开发模式:PD设计数据库模型,然后生成数据库脚本,再然后建立数据库(可能还要写段SQL脚本初始化一点数据),再然后用上个ORM框架,最后开始狂写代码。

实在太枯燥,太麻烦啦。

最近EF更新好像开始支持Code-First模式,看了几篇帖子觉得这才是我想要的开发模式:先写POCO类,然后自动生成数据库(如果是测试,可能这一步都可以暂时不做,然后开始写代码。简单的POCO类比那些充血的实体实在是优雅了好多。别的优点那就更不用说啦,在mvc中直接拿做models层。我实在是太需要这些啦。

不过C在.net中code-First模式不是EF的专有。现在我将用我最喜爱的Subsonic来实现这个功能。Subsonic是一个轻量级的ORM方案,官网上也有很多教程。大家一起来学习下。

首先我胶需要下载Subsonic 3以上的版本,3以下的版本不支持code-first。另外Subsonic 3提供的LinqProvider可以让我们应用Linq进行数据库操作。

首先我们设计一个类:记得引入 Subsonic

public class Usr
    {
        [SubSonicPrimaryKey]        
        public int Id { get; set; }

        [SubSonicStringLength(50)] 
        public string UserName { get; set; }

        [SubSonicStringLength(50)]
        [SubSonicNullString]       
        public string Role { get; set; }
       
        public bool SystemUser { get; set; }

        [SubSonicStringLength(50)]        
        public string Password { get; set; }
        
        public DateTime Expire { get; set; }
        
        public bool Active { get; set; }        
    }
注意类属性上的attribution ,它将指定我们在生成数据库时使用何种数据类型及长度等相关信息。
有了这个类,我们怎样让它生成数据库呢,太简单啦,看代码:记得引入 Subsonic
using System;
using SubSonic.Repository;

namespace BuildDBApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("正在为您生成数据库...");
            _001_Init build = new _001_Init();
            build.init();
            Console.WriteLine("生成成功...");
            Console.WriteLine("初始化数据...");
            //查询和增加数据时可批定SimpleRepositoryOptions.None,意为不更改数据库结构。
            var repo = new SimpleRepository("UCerterDB", SimpleRepositoryOptions.None);
            UCenter.Entitys.Usr model = new UCenter.Entitys.Usr();
            model.UserName = "Ants";
            model.Password = "123456";
            model.Active = true;
            model.Expire =DateTime.Now;
            model.SystemUser = true;
            repo.Add(model);
            Console.WriteLine("完成,请关闭窗口!");
            Console.Read();
        }
    }
    internal class _001_Init
    {
        public void init()
        {
            //一定要指定SimpleRepositoryOptions.RunMigrations,意为可以更改数据库结构
            var repo = new SimpleRepository("UCerterDB", SimpleRepositoryOptions.RunMigrations);

            //生成表,查询不到这个表时,它会自动生成表。很简单吧!
            var Usr = repo.Single<UCenter.Entitys.Usr>(x => x.Id == 0);
           var ticket = repo.Single<UCenter.Entitys.Ticket>(x => x.Id == 0);
        }
    }
}
 
code-first其实并不神秘。我相信很多人和我一样喜欢这种模式。更多介绍请请看官网。
posted @ 2010-12-28 12:08  Ants  阅读(1741)  评论(0编辑  收藏  举报