1. 程式人生 > >C# Code First 配置

C# Code First 配置

text png 而不是 打開 pre get conn ngs 配置文件

前言

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

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

開始

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

1)建立模型

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

技術分享

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

技術分享

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

技術分享

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

如下:

技術分享

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

技術分享

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

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

技術分享

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

技術分享

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

update-database

技術分享

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

技術分享

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);
        }
    }
}

C# Code First 配置