EF之Code First代碼優先


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表,這樣就達到了多對多的關系.
 
        

using (var context = new Model1())
{
context.Database.Initialize(true);
}


對這個上下文進行操作的時候它才會被創建 2018-11-15 21:57:15
 
        
 
       


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM