EF之Code First代碼優先
阿新 • • 發佈:2018-08-29
tco 數據庫名 ati collect png 多對多 框架 src .data
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.cs public virtual IList<User> Users { get; set; }
生成完,它會出現一個RoleUser表,這樣就達到了多對多的關系.
EF之Code First代碼優先