1. 程式人生 > >EF之Code First代碼優先

EF之Code First代碼優先

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代碼優先