zoukankan      html  css  js  c++  java
  • Subsonic: CodeFirst开发模式

    一直以来都在使用数据驱动的开发模式: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其实并不神秘。我相信很多人和我一样喜欢这种模式。更多介绍请请看官网。

    原创文字只代表本人某一时间内的观点或结论,本人不对涉及到的任何代码担保。转载请标明出处!

  • 相关阅读:
    Xamarin.Android和UWP之MVVM的简单使用(二)
    Xamarin.Android和UWP之MVVM的简单使用(一)
    那些年用过的xUnit.net的简单用法
    Xamarin.Android之给我们的应用加点过渡效果
    Xamarin.Android之Splash的几种简单实现
    Xamarin.Android之布局文件智能提示问题
    Xamarin.Android之Spinner的简单探讨
    Xamarin.Android之封装个简单的网络请求类
    Xamarin.Android再体验之简单的登录Demo
    【分库分表】sharding-jdbc实践—分库分表入门
  • 原文地址:https://www.cnblogs.com/leleroyn/p/1918776.html
Copyright © 2011-2022 走看看