使用傳統的sql去操作資料庫雖然思路更加清晰,對每一步資料庫讀寫操作都能監控到,但是對大資料存儲,或存儲規則複雜的程式就需要編寫大量的SQL語句且不易維護。.orm大大友善了複雜的資料庫讀寫操作, 讓代碼編寫更易讀,而且使用orm的很多特性可免去對資料庫的一些維護操作。
第一步:安裝Nuget包我這裡連接配接的是SQL server資料庫,這兩個就夠用了。

public class RequestDataDBContent : DbContext
{
public DbSet<RequestData> RequestData { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//注入Sql連結字元串
optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings["Data"].ConnectionString);
}
}
連接配接字元串沒有特殊要求,根據不通資料庫配置provider
<connectionStrings>
<add name="Data" connectionString="DATA SOURCE=Host;Initial Catalog=DBName;USER ID=sa;PASSWORD=Password;" providerName="System.Data.SqlClient" />
</connectionStrings>
接下來就要配置實體,跟資料庫關聯上下文了,這一步有許多小細節需要注意,不然很容易報錯。
[Table("Data")] //這裡用table指定資料庫表名,這裡是不需要家dbo的,加了反而報錯, 不指定table也可以,一般預設資料庫表名與實體名相同,傳統ef配置了自動生成表的話,資料庫表名預設為實體名的複數形式。。
public class RequestData
{
[Key]//指定主鍵,使用ef實體必須有主鍵
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]//我這裡設定了自增長主鍵
public int id { get; set; }
public string did { get; set; }
public DateTime utime { get; set; }
public string pid { get; set; }
public string type { get; set; }
public string addr { get; set; }
public string addrv { get; set; }
public DateTime ctime { get; set; }
}
資料庫上下文代碼
public class RequestDataDBContent : DbContext
{
public DbSet<RequestData> RequestData { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
//注入Sql連結字元串
optionsBuilder.UseSqlServer(System.Configuration.ConfigurationManager.ConnectionStrings["Data"].ConnectionString);
}
}
這裡就配置好了實體部分,接下來就是使用了
這裡列舉簡單的查詢,新增操作
//建立資料庫上下文
RequestDataDBContent db = new RequestDataDBContent();
foreach (Entity item in entityList)
{
item.did = requestBody.did;
item.utime = requestBody.utime;
//去除重複資料,使用linq從資料庫查詢重複資料
int i = (from q in db.RequestData where q.id == item.id select q).Count();
if (i > 0)
{
continue;
}
//實體添加至目前資料庫緩存
db.RequestData.Add(item);
}
//批量送出至資料庫
db.SaveChanges();
使用ef簡單的操作就像這樣就結束了。
在使用如果報錯,說什麼資料庫對象不存在等等,這是需要關注下資料庫中的表是否已建好。或者配置自動建立表。