1. 程式人生 > >EF CodeFirst學習筆記1

EF CodeFirst學習筆記1

一直使用EF的DBFirst沒使用過CodeFirst,而且CodeFirst使用的人又多,雖然麻煩點但是還是要學下的。

來寫個一使用的入門教程

新建一個codefirst的demo,需引入EntityFramework

然後簡單建立一模型 這邊以Table特性命名Emp,預設如果不加此特性約定是以s結尾如Emps生成表

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace EFcodefirstdemo.model
{
    [Table("Emp")]
    public class Emp
    {
        [Key]
        public string empid { get; set; }
        public string empname { get; set; }
        public int? age { get; set; }
        public string depid { get; set; }
        public string tel { get; set; }
    }
}

接著建立上下文 我們自己建立的oaDbContext要繼承DbContext,並且以剛才建立的模型的泛型類建立一個DbSet<T>屬性.注意,每個模型都必須在DbContext中定義一個對應的DbSet<T>屬性。在DbContext中建立字串連線建構函式,我們以name=""指定我們在配置檔案中的連線字串。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Configuration;

namespace EFcodefirstdemo.model
{
    public class oaDbContext:DbContext
    {
        public oaDbContext()
            : base("name=MyStrConn")
        {
            //策略一:資料庫不存在時重新建立資料庫
            //Database.SetInitializer<oaDbContext>(new CreateDatabaseIfNotExists<oaDbContext>());
            //策略二:每次啟動應用程式時建立資料庫
            //Database.SetInitializer<oaDbContext>(new DropCreateDatabaseAlways<oaDbContext>());
            //策略三:模型更改時重新建立資料庫
            Database.SetInitializer<oaDbContext>(new DropCreateDatabaseIfModelChanges<oaDbContext>());
            //策略四:從不建立資料庫
            //Database.SetInitializer<oaDbContext>(null);
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //throw new UnintentionalCodeFirstException();
        }

        public DbSet<Emp> Emps { get; set; }
    }
}

配置下資料連線字串 App.Config中connectionStrings節點中增加

    <add name="MyStrConn" providerName="System.Data.SqlClient" connectionString="Data Source=.;Initial Catalog=testdb;Integrated Security=True;user id=sa;password=123;"/>

不清楚ef5下可以ef6下次字串就是不行

如下的就可以了

  <add name="MyStrConn" connectionString="Server=192.168.8.36;Database=testdb;uid=sa;pwd=123;" providerName="System.Data.SqlClient" />

執行看下效果

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading;
using EFcodefirstdemo.model;

namespace EFcodefirstdemo
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (var db = new oaDbContext())
                {
                    Emp model = new Emp();
                    model.empid = "001";
                    model.empname = "tony";
                    model.age = 10;
                    model.depid = "IT";
                    model.tel = "123";
                    db.Emps.Add(model);
                    db.SaveChanges();
                }
            }
            catch (Exception e)
            {
            }
            Console.ReadKey();
        }
    }
}

這樣我們資料庫中就增加了一個testdb的資料庫而且裡面有表Emp已經插入了剛才的一條資料



這就是簡單的CodeFirst的實現方法.