首页 > 代码库 > C# EntityFramework简单入门

C# EntityFramework简单入门

本文旨在通过一个小练习,对EntityFramework的Code First模式有一个简单的感性认识。

环境:VS2013,SQL Server 2012

打开“SQL Server Management Studio”。

对象资源管理器中|数据库|右键|新建数据库,输入数据库名“BookShop”,确定。

对象资源管理器中|数据库|BookShop|新建查询,在打开的新窗口中输入:

CREATE TABLE Books 
( 
    [ID] INT NOT NULL PRIMARY KEY IDENTITY, 
    [Title] NVARCHAR(100) NOT NULL,
    [Author] NVARCHAR(50) NOT NULL,
    [Price] DECIMAL(16, 2) NOT NULL
)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(Winform编程入门, 张三, 34.50)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(ASP.NET MVC编程入门, 李四, 32.10)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(资治通鉴, 司马光, 88.50)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(史记, 司马迁, 132.10)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(西游记, 吴承恩, 28.50)
INSERT INTO Books ([Title], [Author], [Price]) VALUES(红楼梦, 曹雪芹, 132.10)

点击工具栏中的执行,Books表和初始数据就建立好了。

打开VS2013,新建一个控制台应用程序。

项目|右键|管理NuGet程序包,在打开的对话框中,左边选择联机,右上角的搜索里输入“EntityFramework”,找到后点击安装,完成后会在解决方案目录下多一个“packages”目录。

在App.config中添加连接字串:

  <connectionStrings>
    <add name="DbBookContext" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=BookShop;User ID=sa;Password=***" providerName="System.Data.SqlClient" />
  </connectionStrings>

在Program.cs中添加对应的代码:

    public class Book
    {
        public int ID { get; set; }
        public string Title { get; set; }
        public string Author { get; set; }
        public decimal Price { get; set; }
    }
    public class DbBookContext : DbContext
    {
        //public DbBookContext()
        //{
        //    Database.Connection.ConnectionString = @"Data Source=.\SQLEXPRESS;Initial Catalog=BookShop;User ID=sa;Password=server01";
        //}
        public DbSet<Book> Books { get; set; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            DbBookContext bookContext = new DbBookContext();
            IQueryable<Book> books = bookContext.Books;
            foreach (Book book in books.OrderBy(b=>b.Price))
            {
                Console.WriteLine(String.Format("{0},{1},{2},{3}", book.ID, book.Title, book.Author, book.Price));
            }
        }
    }

生成并运行。(连接字串也可以在DbBookContext的构造函数中赋值。)

试验一:将DbBookContext改成其他名字,找不到连接字串,运行不报错,也没有结果,数据库里生成了一个新的数据库。

实验二:将Book中的ID改名,报异常:EntityType ‘Book‘ has no key defined. 

实验三:将Book改成Book1,运行不报错,运行后数据库里多了两个空表:Book1,__MigrationHistory,此时再把代码改回去,运行会报异常,在数据库里删除__MigrationHistory就好了。

实验四:将DbBookContext的Books字段改成别的名字,运行结果正常,这个名字随便起。

初步结论,数据库表名是类名的复数形式,试了一下Foot,生成的表名是Feet,如果不是正常的单词,就直接加个“s”。 

C# EntityFramework简单入门