4,030 次浏览

Squirrel Framework 1.0.13 说明文档

Squirrel Framework – 是一个轻量级的 MongoDB 存储封装类库。同时,它还尝试为使用者提供了一系列的拓展类,方便日常的 .NET 开发需求。它致力于让你轻松、快速地构建基于 MongoDB 的应用程序。

下面我们简单介绍一下 Squirrel Framework 的核心功能,只要以下 4 个步骤,你就能完成持久化层的开发。

你可以在这里查看它的全部实现:https://github.com/imnista/SquirrelFramework


开始行动

  1. 新建一个 .NET 工程,请确认该工程所选目标框架是 .NET Core 2.0 或 .NET Framework 4.6.1 及其后续版本
  2. 通过搜索关键字 “SquirrelFramework” 下载本类库的 Nuget Package。你也可以使用 Package Manager 通过执行以下命令完成包下载

    
        PM> Install-Package SquirrelFramework -Version 1.0.15.1
    
    
  3. 创建实体类

    
        using SquirrelFramework.Domain.Model;
    
        [Database("YourDatabaseName")]
        [Collection("UsersCollectionName")]
        public class User : DomainModel
        {
            public string Name { get; set; }
            public string Gender { get; set; }
            public int Age { get; set; }
        }
    
    

    [Database] 自定义特性并不是必须的,你可以在 “/Config/mongodb.config” 配置 MongoDB 的默认数据库名。[Collection] 自定义特性则用于指定实体类对应的 MongoDB 表名,它是必须的。【从 1.0.14 版本开始,[Collection] 标签不再是必须的,如果你没有通过它指定表名称,则这个 DomainModel 的类名将直接作为表名称】

  4. 创建你的 MongoDB 数据操作类

    
        using SquirrelFramework.Repository;
    
        public class UserRepository: RepositoryBase<User> {}
    
    

    没错,就这么简单!

  5. 就这样,大功告成!开始你的增删改查!这里是一些例子:

    
                var userRepo = new UserRepository();
    
    
    • 新增加一位 User

      
                  userRepo.Add(new User{
                      Name = "Hendry",
                      Gender = "Male",
                      Age = 18,
                      Geolocation = new Geolocation(121.551949, 38.890957) 
                  });
      
      
    • 获取所有以我当前 GPS 坐标为中心,2 公里内的所有 User

      
                  userRepo.GetNearBy(new Geolocation(121.551949, 38.890957), 2000);
      
      
    • 异步地删除所有年龄大于 25岁的 User

      
                  userRepo.DeleteManyAsync(u => u.Age > 25);
      
      
    • 按照 Age 字段降序排列分页(每页 15 条记录),获取其第三页的所有 User 数据

      
                  //  方法签名
                  //  public IEnumerable<TDomain> GetAllByPageSortBy(
                  //      int pageIndex, 
                  //      int pageSize, 
                  //      Expression<Func<TDomain, object>> sortBy, 
                  //      bool isSortByDescending = false
                  //  );
      
                  userRepo.GetAllByPageSortBy(2, 15, u => u.Age, true);
      
      

一些拓展

  • 如果你数据库的表名字是动态的(比如分表场景)。例如,你正在按月存储你的用户信息:

    * Users201801
    * Users201802
    * Users201803
    * …

    你可以改用 CustomizedRepositoryBase 类作为基类。

        public class UserRepository: CustomizedRepositoryBase<User> {}
    

    随后,在进行数据库操作时,你可以动态地指定表名。例如,新增一条 User 记录到 201805 表

    
                var userRepo = new UserRepository();
                userRepo.Add("Users201805", new User{
                    Name = "Hendry",
                    Gender = "Male",
                    Age = 18,
                    Geolocation = new Geolocation(121.551949, 38.890957) 
                });
    
    

  • 快速创建 Domain Service
    当然,这不是必需的,如果你打算用到它,只要如下一行代码即可。

        public class UserService : ServiceBase<User, UserRepository> {}
    

获取最新包

你可以随时从 Nuget.org 官方网站获取最新的 SquirrelFramework 包

https://www.nuget.org/packages/SquirrelFramework

About nista

THERE IS NO FATE BUT WHAT WE MAKE.

5 thoughts on “Squirrel Framework 1.0.13 说明文档

  1. [Database(“YourDatabaseName”)]
    [Collection(“UsersCollectionName”)]
    public class User : DomainModel
    {
    public string Name { get; set; }
    public string Gender { get; set; }
    public int Age { get; set; }
    }
    这种属性注释声明方式:有点代码污染,Entity Framework提供一套Entity Fluent API方式,将注释声明转移到一个配置约定Class里,DB在初始化是,加载所有的配置约定类,来构建存储模型结构。消除了Domain Class代码污染性。

  2. userRepo.Add(“Users201805”, new User{
    Name = “Hendry”,
    Gender = “Male”,
    Age = 18,
    Geolocation = new Geolocation(121.551949, 38.890957)
    });
    分表存储,实质是一种垂直结构化存储,可以衍生一个PartitionKey,PartitionKey通过一种算法或一些规则来生成,如年月,或者特征数据(租户ID) Hash生成。使用的时候通过统一的方式获取。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注