码迷,mamicode.com
首页 > Windows程序 > 详细

C# Code First 配置

时间:2017-05-25 15:44:33      阅读:402      评论:0      收藏:0      [点我收藏+]

标签:frame   就会   png   oid   应用   ace   round   代码   asd   

 

前言

所谓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 配置

标签:frame   就会   png   oid   应用   ace   round   代码   asd   

原文地址:http://www.cnblogs.com/alunchen/p/6903753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!