.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的列名不一致時,好像沒有辦法進行處理。
以上代碼僅供演示。