天天看點

EntityFramework Core (一)記一次 .net core 使用 ef 6

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

第一步:安裝Nuget包我這裡連接配接的是SQL server資料庫,這兩個就夠用了。

EntityFramework Core (一)記一次 .net core 使用 ef 6
第二步:配置連接配接字元串,我這邊引用了,System.Configuration.ConfigurationManager這個包,這樣再.net core 程式裡也可以像 傳統framework那樣讀取配置

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簡單的操作就像這樣就結束了。

在使用如果報錯,說什麼資料庫對象不存在等等,這是需要關注下資料庫中的表是否已建好。或者配置自動建立表。