连接 MySql数据库
1、安装:mysql-connector-net-8.0.20.msi
官方下载地址:http://dev.mysql.com/downloads/connector/net/
如果不想注册Oracle账号也可以用我的地址:https://download.csdn.net/download/u014117094/12414340
2、安装 MySql.Data NuGet程序包: 使用 Install-Package MySql.Data -Version 8.0.20
public class DbHelper
{
public static Database MsDb()
{
string constr = ConfigurationManager.ConnectionStrings["connString"].ToString();
Database db = new Database(constr,DatabaseType.SqlServer2008);
return db;
}
public static Database MySqlDb()
{
string constr = ConfigurationManager.ConnectionStrings["connStrMysql"].ToString();
Database db = new Database(constr, DatabaseType.MySQL);
return db;
}
}
public class User
{
public int UserId { get;set; }
public string Email { get;set; }
}
查询集合
List<User> users = DbHelper.MySqlDb().Fetch<User>("select userId, email from users");
映射
默认情况下不需要映射。如果不指定其属性将会假设表的名称是类别名称,主键是“ID”。 最常用的基本属性映射是: [TableName("Users")] [PrimaryKey("UserId")] public class User { public int UserId { get;set; } [Column("emailAddress")] public string Email { get;set; } [ResultColumn] public string ExtraInfo { get;set; } [Ignore] public int Temp { get;set; } }
查询单个对象
从数据库中查询一个对象可以几种不同方法来完成。 通过ID最简单的方式是使用 SingleById<T>()方法。 User u = DbHelper.MySqlDb().SingleById<User>(3); 通过SQL下面你可以看到,只有其中的规定。如果您不显式提供选择的条款将自动为您生成和在其中将随后附上。 User u = DbHelper.MySqlDb().Single<User>("where emailaddress = @0", "[email protected]"); or User u = DbHelper.MySqlDb().Single<User>("select u.* from users u where emailaddress = @0", "[email protected]"); 这两种方法都有一个“ordefault”方法,如果您不确定对象的存在。如果它不存在,而且您没有使用到 ordefault 就会引发异常。 还有 First<T> 和 FirstOrDefault<T> 如果有多条数据将抛出一个异常,如果不多于1个记录将被返回。
插入,更新,删除
插入新记录
User u = new User() { Email = "[email protected]", LastLoggedIn = DateTime.UtcNow }; DbHelper.MySqlDb().Insert(u);
更新记录
var user = DbHelper.MySqlDb().SingleById(1); user.Email = "[email protected]"; db.Update(user);
删除记录
var user = DbHelper.MySqlDb().SingleById(1); db.Delete(user); or db.Delete<User>(1);
覆盖或新建记录
User u = new User() { Email = "[email protected]", LastLoggedIn = DateTime.UtcNow }; DbHelper.MySqlDb().Save(u); 这样会插入一个新记录或更新一个现有记录。它是否存在是由主键确定的。
查询列表
获取所有:
List<User> users = DbHelper.MySqlDb().Fetch<User>();
标准获取:
List<User> users = DbHelper.MySqlDb().Fetch<User>("where isActive = 1"); 使用SQL: List<User> users = DbHelper.MySqlDb().Fetch<User>("select u.* from users where u.isActive = 1");
懒惰警告:
以下方法Query<T>使用生成的关键字。运行该查询的结果都被遍历。如果你不完全理解这一概念,请使用Fetch<T>。 List<User> users = DbHelper.MySqlDb().Query<User>("select u.* from users where u.isActive = 1"); 查询分页主要有两种方法用于查询分页。 Page<T> pagedUsers = DbHelper.MySqlDb().Page<User>(2, 10, "select u.* from users u order by userid"); 其中Page<T>被定义为: public class Page<T> { public long CurrentPage { get; set; } public long TotalPages { get; set; } public long TotalItems { get; set; } public long ItemsPerPage { get; set; } public List<T> Items { get; set; } } 注意:您必须在SQL语句中提供一个order by语句,以便查询知道您希望将数据分页的顺序。页面的第一个参数是页面编号。这个数字从第一个页面的1开始。第二个参数是页面的大小。在上面的示例中,将返回包含10个用户的第二个页面。
SkipTake<T>
SkipTake<T> 方法与在LINQ中跳过采取方法非常相似。它具有与页面< T >方法相同的参数数量,但第一个参数不是页码,而是记录的数量(即要取的记录数量?)。第二个参数是跳过x个记录之后返回的记录数(即开始的位置?)。为了返回与Page<T>方法相同的结果,查询将如下所示: List<User> users = DbHelper.MySqlDb().SkipTake<User>(10, 10, "select u.* from users u order by userid");
对事务的支持
Example 1 DbHelper.MySqlDb().BeginTransaction(); //此处代码省略 DbHelper.MySqlDb().CompleteTransaction(); Example 2 using (var transaction = DbHelper.MySqlDb().GetTransaction()) { //此处代码省略 transaction.Complete(); }