EF CodeFirst學習筆記1
阿新 • • 發佈:2019-01-22
一直使用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的實現方法.