标签:数据库名 应用 文件夹 data 对象属性 lib linq 查询 system
之前大致总结了下EF 设计器的概念和实战操作,接下来来总结下 Code First 构建的实体数据模型。
EF 设计器创建实体数据模型文件(.emdx)整合 Entity Framework,并通过 DBContext 和 DbSet 类来实现支持数据库功能的开发,
然而实体数据模型的构建与维护并不容易,难以应付开发大型的商业应用所需。因此,Entity Framework 在后续版本推出了Code First
开发模式,以相对简单明了的类设计取代了EF 设计器构建的实体数据模型文件(.emdx)。
一、传统数据类对象
Code First 通过典型的传统类对象(Plain Old ClassObject,POCO)映射到数据结构,简化了 EF 的开发过程,开发人员
只需创建DbContext 和 DbSet 继承的对象,EF 会自动处理其中的转换细节。与 EF 设计器 相比,Code First 只保留了原来
edmx实体数据模型文件中的 DBContext、DbSet派生文件。
无论是从数据库生成模型,还是从模型创建数据库,EF 一旦确认DbSet 对象属性与数字表字段结构间的映射正确,便会自动
维护数据查询变动等的相关操作。
二、创建项目
创建一个控制台应用程序的项目,项目名称为:CodeFirstProject
然后选择项目 ==> 单击鼠标右键 ==> 选择 管理NuGet程序包 ==> 选择 浏览 页签 ==> 在搜索框输入 回车搜索 ==> 点击 安装
动态图在这儿:
接着在项目中添加一个名为 Model 的文件夹,并在该文件夹中添加两个类文件:Student.cs 和 StudentInfoModel.cs 。
Student 类中定义以下属性:
public class Student { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } public bool Sex { get; set; } public string Hobby { get; set; } public DateTime Birthday { get; set; } public decimal Tuition { get; set; } }
StudentInfoModel 类需要继承 DbContext,并定义 Students 属性:
using System.Data.Entity; namespace CodeFirstProject.Model { public class StudentInfoModel : DbContext //继承了 DbContext { public DbSet<Student> Students { get; set; } } }
接下来,我们需要在Main 方法中实例化 StudentInfoModel,并获取 Students 属性的总数:
using CodeFirstProject.Model; using System; using System.Linq; namespace CodeFirstProject { class Program { static void Main(string[] args) { StudentInfoModel stuModel = new StudentInfoModel(); int stuCount = stuModel.Students.Count(); Console.WriteLine(stuCount); Console.Read(); } } }
第一次执行程序时,SQL Express 会自动创建名为 CodeFirstProject.Model.StudentInfoModel 的数据库,
并创建了 Student 表,结构由 Student 类文件中配置的属性决定。我们可以通过 "SQL Server 对象资源管理器"(可在 视图 菜单下找到)
来查看程序自动生成的数据库:
我们可以通过查看数据库的属性,来找到程序创建的数据库所在的目录:
选中数据库 ==> 单击鼠标右键 ==> 属性
数据库连接:
如果不在 StudentInfoModel 类中指定数据库的连接信息,SQL Express 将会创建所需的数据库。
而在实际开发中,通常我们会通过连接字符串的设置来自行创建所需的数据库。
首先,我们需要在 StudentInfoModel 类中添加一个构造函数,并配置数据库的连接名称:
using System.Data.Entity; namespace CodeFirstProject.Model { public class StudentInfoModel : DbContext { public StudentInfoModel() : base("name=StuInfoModelConnection") //添加构造函数,并配置数据库的连接名称 { } public DbSet<Student> Students { get; set; } } }
其次打开 App.config 文件,在 configuration 节点中添加如下内容:
<connectionStrings> <!--DataDirectory 表示数据库路径的替换字符串。--> <add name="StuInfoModelConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB;
AttachDbFilename=|DataDirectory|CodeFirstProjectModel.mdf; Integrated Security=True;Connect Timeout=30;
MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient"/> </connectionStrings>
第三步,在项目的 \bin\Debug 目录下创建数据库文件:
特别注意:App.config 中配置的数据库名称,需要和创建时的数据库名称保持一致哦!!!
最后,可以通过添加现有项的方式,把数据库拷贝到项目的根目录:
App.config 文件的连接配置也要相应的调整下,才能使用根目录中的数据库文件哟!
<connectionStrings> <!--将 AttachDbFilename=|DataDirectory|CodeFirstProjectModel.mdf; 这个配置替换成
Initial Catalog=CodeFirstProjectModel; 这个就好了!--> <add name="StuInfoModelConnection" connectionString="Data Source=(LocalDB)\MSSQLLocalDB; Initial Catalog=CodeFirstProjectModel; Integrated Security=True;Connect Timeout=30;
MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient"/> </connectionStrings>
好了,在空白项目中使用 Code First 创建程序, EF 会自动完成其中与数据库的互动细节。
与 EF 设计器相比,Code First 直接采用类取代 EMD 文件,内容更为简洁,而实体类与数据库
底层数据结构的映射设置由惯例原则、属性标记以及 Fluent API 等程序设置的方式来取代 XML
格式的 SSDL、CSDL与MSL设置。
Entity Framework 实体数据模型——Code First
标签:数据库名 应用 文件夹 data 对象属性 lib linq 查询 system
原文地址:https://www.cnblogs.com/LittleBai/p/13959476.html