ASP.NET MVC——CodeFirst開發模式

    Entity Framework框架提供了幾種開發模式,好比Database First,Model First,Code First。Database First是最老也是應用得最普遍的一種設計方式。Database First這種方式的設計高度依賴於數據庫中表的結構,根據表及表間的關係來建立模型。若是後期需求有所變動或者功能有很大變化的話,須要涉及到更改數據庫所付出的代價將會很大,由於以前編寫好的代碼將再也不適用於新的表,咱們必需重構以更改代碼中的邏輯以適應更改以後的表。Model First是建立ADO.NET實體對象以及它們之間的關係,而後再指定到數據庫的映射。這個實體對象即爲Model。數據庫

    咱們今天要講的是Code First(代碼先行)。它思想就是先定義模型中的類,再經過這些類生成數據庫。這種開發模式適合於全新的項目,它使得咱們能夠以代碼爲核心進行設計而不是先構造數據庫。服務器

    接下來我就以一個簡單的例子來介紹這種開發模式。咱們的需求是兩個表,博客表和評論表。一個博客對應多個評論,一個評論對應一個博客。這是一對多關係。咱們先新建一個ASP.NET MVC項目,並用NuGet安裝EntityFramework。而後創建兩個Model。框架

    public class Blog
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public DateTime Time { get; set; }
        public string Summary { get; set; }
        public string Content { get; set; }

        public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>();
    }
    public class Comment
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        public string VisitorName { get; set; }
        public string Email { get; set; }
        public DateTime Time { get; set; }
        public string Content { get; set; }

        [ForeignKey("Blog")]
        public Guid BlogId { get; set; }
        public virtual Blog Blog { get; set; }
    }

    接下來咱們建立數據上下文。新建一個文件夾叫Context,並在其中新建類,代碼以下:ide

    public class EFDbContext : DbContext
    {
        public DbSet<Blog> Blogs { get; set; }
        public DbSet<Comment> Comments { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();  //去除「設置表名爲複數」這條約定
        }
    }

    接着咱們在Web.config中來配置數據庫,咱們使用輕量級的LocalDB。在Web.config中的<configuration>節點中加入以下配置ui

  <connectionStrings>
    <add name="EFDbContext" connectionString="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=Blog;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

    接下來,咱們新建一個控制器,選擇「包含視圖的MVC5控制器(使用Entity Framework)」,由於咱們的重點是講CodeFirst,因此咱們直接利用模板來生成控制器和視圖,模型類選擇Blog,數據上下文類選擇EFDbContext(這裏須要預先編譯一下才能看到),控制器名稱爲HomeController,點擊添加,咱們便有了具備CRUD功能的Controller和View。spa

    咱們運行項目,就能夠進行CRUD操做了。而後咱們結束調試,打開服務器資源管理器,在數據鏈接那裏就能夠看到咱們利用代碼生成的數據庫表。設計

    最後,咱們來說講表與表之間的關係。有三種,一對一關係,一對多關係,多對多關係。主要在導航屬性裏進行配置,好比前面的blog表和comment表,咱們在類裏面加了這樣的代碼。調試

public virtual ICollection<Comment> Comments { get; set; } = new List<Comment>(); //一個blog對應多個comment
public virtual Blog Blog { get; set; } //一個comment對應一個blog

    多對多關係咱們便須要藉助第三張表來連接。code

相關文章
相關標籤/搜索