Skip to content

微型 ORM-FluentData

🏷️ FluentData

简介

与其他微型 ORM(如 Dapper 和 Massive)类似,FluentData 关注性能和易用性。它允许开发人员拥有对 SQL 较多的控制,而不是依赖 ORM 进行自动生成。它不仅可以使用 SQL 来执行查询、增添和更新操作,还可以支持使用存储过程和事务。 根据文档描述,FluentData 可以在不改动已有结构的情况下,与任何业务对象一同工作。

以下是 FluentData 的一些其他特性:

  • 多结果集(Multiple Result Set):在一次数据库操作下返回多个数据集;

  • 开发人员可使用强类型对象或动态对象;

  • 可为创建时需要特殊处理的复杂对象自定义实体工厂(Custom Entity Factory);

  • 具有添加其他数据库支持的能力。

FluentData 需要 .NET 4.0,并支持 SQL Server、SQL Azure、SQL Server Compact 以及使用 .NET 驱动的 Oracle 和 MySQL。

相关文章

项目地址

Dll 下载地址

教程

测试代码

点击查看代码
cs
using FluentData;
using FluentSample.Models;
using System.Collections.Generic;
using System.Web.Mvc;

namespace FluentSample.Controllers
{
    public class TestController : Controller
    {
        private IDbContext DbContext = new DbContext().ConnectionStringName("DefaultConnection", new SqlServerProvider());

        // GET: /Test/
        public ActionResult Index()
        {
            List<Test> models = DbContext.Sql("select * from test").QueryMany<Test>();
            return View(models);
        }

        // GET: /Test/Details/5
        public ActionResult Details(int id)
        {
            Test test = DbContext.Sql("select * from Test where Id = @Id")
                .Parameter("Id", id)
                .QuerySingle<Test>();

            return View(test);
        }

        // GET: /Test/Create
        public ActionResult Create()
        {
            return View();
        }

        // POST: /Test/Create
        [HttpPost]
        public ActionResult Create(Test test)
        {
            try
            {
                // TODO: Add insert logic here
                int rtnVal = DbContext.Insert("Test")
                    .Column("Id", test.Id)
                    .Column("Name", test.Name)
                    .Execute();

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        // GET: /Test/Edit/5
        [HttpGet]
        public ActionResult Edit(int id)
        {
            Test test = DbContext.Sql("select * from Test where Id = @Id")
                .Parameter("Id", id)
                .QuerySingle<Test>();

            return View(test);
        }

        // POST: /Test/Edit/5
        [HttpPost]
        public ActionResult Edit(Test test)
        {
            try
            {
                // TODO: Add update logic here
                DbContext.Update("Test")
                    .Column("Name", test.Name)
                    .Where("Id", test.Id)
                    .Execute();

                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }

        // GET: /Test/Delete/5
        [HttpGet]
        public ActionResult Delete(int id)
        {
            Test test = DbContext.Sql("select * from Test where Id = @Id")
                .Parameter("Id", id)
                .QuerySingle<Test>();

            return View(test);
        }

        // POST: /Test/Delete/5
        [HttpPost]
        public ActionResult Delete(Test test)
        {
            try
            {
                // TODO: Add delete logic here
                DbContext.Delete("Test")
                    .Where("Id", test.Id)
                    .Execute();
                return RedirectToAction("Index");
            }
            catch
            {
                return View();
            }
        }
    }
}