C# Code First 配置


 

前言

所謂code first,是代碼優先,而不是傳統的數據庫優先。

code first的好處多多,可不用考慮數據庫,只考慮面向對象。下面我們介紹一下code first的配置。

下一篇文章地址:C# Code First 配置(二)

 

開始

我們這里以建立一個MVC的Code first為例,名字為MVCCodeFirst。

1)建立模型

建立一個數據的新建項,然后選擇ADO.NET實體數據模型,名字為MyModel

image

然后選擇Code First模型,空Code First模型,你也可以選擇來自數據庫的CodeFirst。我們這里選擇空CodeFirst模型

image

確定之后,模型已經建立了

image

 

2)建立實體

我們建立一個實體School,有一個主鍵與學校名字

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MVCCodeFirst.Entity
{
    public class School
    {
        [Key]
        public long Key { get; set; }

        public string Name { get; set; }

    }
}

然后把School添加到DbContext的上下文中。

using System.ComponentModel.DataAnnotations;

namespace MVCCodeFirst.Entity
{
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class MyModel : DbContext
    {
        public MyModel()
            : base("name=MyModel")
        {
        }

        //我們添加的School
         public virtual DbSet<School> Schools { get; set; }
    }
}

 

3)啟動 Enable-Migrations

上面已經建立了表的實體,Code First要創建表,我們要通過命令行來自動生成SQL語句,所以要啟動這個功能。

在【程序包管理器控制台】中,啟動自動生成SQL語句

Enable-Migrations

如下:

image

完成之后,你在代碼里面可以看到,自動添加了一個文件夾為Migrations,並且類為Configuration.cs

image

打開可以看到,這里主要用戶初識化一些默認的數據

namespace MVCCodeFirst.Migrations
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Migrations;
    using System.Linq;

    internal sealed class Configuration : DbMigrationsConfiguration<MVCCodeFirst.Entity.MyModel>
    {
        public Configuration()
        {
            AutomaticMigrationsEnabled = false;
        }

        protected override void Seed(MVCCodeFirst.Entity.MyModel context)
        {
            //初始化數據
        }
    }
}

例如,我們可以初識化學校的數據。這個初始化數據是在輸入命令update-database的時候才會調用

//初始化數據格式
context.Schools.AddOrUpdate(new School() {Key = 1, Name = "望牛墩中學"});
context.SaveChanges();

 

4)配置數據庫

打開web.config,可以看到數據庫連接現在是

<connectionStrings>
    <add name="MyModel" connectionString="data source=(LocalDb)\MSSQLLocalDB;initial catalog=MVCCodeFirst.Entity.MyModel;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
  </connectionStrings>

我們修改成本地連接

<add name="MyModel" connectionString="Server=localhost; Database=MyModel; Trusted_Connection=True;" providerName="System.Data.SqlClient" />

 

5)用命令創建數據庫、表

初識化數據

add-migration init

image

就會生成創建的SQL類在Migrations文件夾下

image

 

創建數據庫、表。在命令中輸入:

update-database

image

我們可以看到本地數據庫中有創建了此數據庫與表:

image

 

 

3.其他

1)果想指定表的名字,可以在實體類上用注解Table,例如

[Table("School")]
public class School

 

2)主鍵注解 [Key]

[Key]
public long Id { get; set; }

 

3)如果想創建一個自增長的主鍵

在DB上下文實體中,繼承OnModelCreating方法,並且實現實體的主鍵自增長

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

namespace MVCCodeFirst.Entity
{
    using System;
    using System.Data.Entity;
    using System.Linq;

    public class MyModel : DbContext
    {
        //您的上下文已配置為從您的應用程序的配置文件(App.config 或 Web.config)
        //使用“MyModel”連接字符串。默認情況下,此連接字符串針對您的 LocalDb 實例上的
        //“MVCCodeFirst.Entity.MyModel”數據庫。
        // 
        //如果您想要針對其他數據庫和/或數據庫提供程序,請在應用程序配置文件中修改“MyModel”
        //連接字符串。
        public MyModel()
            : base("name=MyModel")
        {
        }

        //我們添加的Schools
        public virtual DbSet<School> Schools { get; set; }


        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //自增長主鍵
            modelBuilder.Entity<School>()
                .Property(o => o.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        }
    }
}


可以關注本人的公眾號,多年經驗的原創文章共享給大家。

 
         

 


免責聲明!

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



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