.net core使用数据库

.net core使用数据库

.net core 通过可以通过ef core或其它ORM框架进行数据访问。此处使用EF和Dapper作为示例。

使用EF Core访问数据库

与 .NET Framework访问数据库一直,我们可以使用Code-First进行开发,也可以使用DB-First进行开发。我们不关心是现有数据库还是现有代码,我们关心如何进行访问。

首先创建数据模型Model:

[Table("tbl_user")]
public class UserEntity
{
    [Column("id")]
    public int Id { get; set; }
    [Column("code")]
    public string Code { get; set; }
    [Column("name")]
    public string Name { get; set; }
    [Column("status")]
    public UserStatus Status { get; set; }
}

public enum UserStatus
{
    Enable = 1,
    Disable = 2,
}

然后创建我们的DBContext:

public class DemoDBContext : DbContext
{
    public DbSet<UserEntity> Users { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseNpgsql("server=127.0.0.1;userid=postgres;password=123;database=demo;Pooling=false;Enlist=true");
        base.OnConfiguring(optionsBuilder);
    }

}

使用postgresql数据库。

在程序中,我们使用new关键字创建DbContext对象:

var dbContext = new DemoDBContext();
var user = new UserEntity()
{
    Code = "01",
    Name = "Tom",
    Status = UserStatus.Enable
};

dbContext.Add(user);
dbContext.SaveChanges();
Console.WriteLine("User = " + JsonConvert.SerializeObject(user, Formatting.Indented));

此处演示了正常插入数据库的操作。

使用Dapper访问数据

Dapper是一个轻量级的ORM框架,性能也很好,唯一的缺点是需要写大量的SQL脚本。我们来看一下如何使用Dapper进行数据访问的。

/// <summary>
/// 使用Dapper访问数据库
/// </summary>
public static void UseDapperAccessDatabase()
{
    using (IDbConnection db = OpenConnection("server=127.0.0.1;userid=postgres;password=123;database=demo;Pooling=false;Enlist=true"))
    {
        var jerry = new UserEntity()
        {
            Code = "02",
            Name = "Jerry",
            Status = UserStatus.Enable,
        };
        jerry.Id = (int)db.Insert(jerry);

        var user = db.Get<UserEntity>(1);
        Console.WriteLine($"User = {JsonConvert.SerializeObject(user)}");

        user = db.QuerySingleOrDefault("select * from tbl_user where id=@id", new { id = 2 });
        Console.WriteLine($"User = {JsonConvert.SerializeObject(user)}");
    }
}

/// <summary>  
/// get the db connection  
/// </summary>  
/// <param name="connectionString"></param>  
/// <returns></returns>  
public static IDbConnection OpenConnection(string connectionString)
{
    var conn = new NpgsqlConnection(connectionString);
    conn.Open();
    return conn;
}

Dapper不支持数据库列的映射,也就是说,如果数据库列名和Model的列名不一致时,好像没有办法进行处理。

以上代码仅供演示。

原文地址:https://www.cnblogs.com/youring2/p/9442611.html