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 {  getset; }

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

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

        [SubSonicStringLength( 50)]        
         public  string Password {  getset; }
        
         public DateTime Expire {  getset; }
        
         public  bool Active {  getset; }        

 

    }

 

 

注意类属性上的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);
        }
    }
}

你可能感兴趣的:(first)