1.前言
通過英文可知,表示的是代碼優先,一般建立EF都是先建立資料庫,建立根據資料庫的EF實體模型,而code - first 則是反過來!。。。
2.代碼實戰
我們這次建立的不是原來的資料庫EF設計器,而是空的Code first 模型。如果說你的項目引用中沒有entity framkwork,則需要去nuget程式包中安裝ef架構(entity)
建立一個類,這個類就是資料的上下文,它的目錄在MVC項目中的Model檔案夾,base中的是你所建立的資料庫名稱,而你建立的表也是在model的這個檔案夾中,
using System;using System.Collections.Generic;using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;using System.Linq;using System.Web;namespace MyFirstCode.Models{ public class Grade { public int GradeID { get; set; } [Required]//必須唯一 [DisplayName("學生姓名")] //列名 [Column("SName")]//資料庫中的列名 [StringLength(20)]//字串長度 public string GradeName { get; set; } }}
using System.ComponentModel;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;
這是添加欄位約束用到的命名空間
接下來看下我們的連接字串部分:
<connectionStrings> <add name="MyDemoDB" connectionString="server=.;database=MyDemoDB;uid=sa;pwd=sa" providerName="System.Data.SqlClient"/> </connectionStrings>
providerName="System.Data.SqlClient" 這個參數代表的是資料的來源,即來源於該命名空間下,我們也可以寫成MySqlClient,當然前提是你引用了MySqlClient,呵呵,這樣就對了項目遷移帶來了很大的方面.
1對多的關係如何寫?
假如有Student 和 Grade兩個表 每個年紀有很多學生.
Student.cs:
[ForeignKey("NianJi")] public int GradeID { get; set; } /// <summary> /// virtual 虛擬。 消極式載入 /// </summary> public virtual Grade NianJi { get; set; }
Grade.cs:
public class Grade { public int GradeID { get; set; } public string GradeName { get; set; } public virtual IList<Student> Students { get; set; } }
結果
多對多的關係怎麼寫?
列入角色和使用者表,每個使用者有很多角色即role與user表
User.cs public virtual IList<Role> Roles { get; set; }Role.cspublic virtual IList<User> Users { get; set; }
產生完,它會出現一個RoleUser表,這樣就達到了多對多的關係.