Entity Framework
ORM框架——对象关系映射:
在没有接触这个之前,我们都是使用ADO.NET的。
EF是ORM框架的一种
在写sql语句会写错,数据又都是弱类型,不好转换。
EF就是用项目中的MODEL代替数据库的各种表,直接通过操作dbContext就可以获得数据库中的数据,然后用LINQ来编写数据库操作语法,EF会自己将LINQ语句翻译为对应的SQL语句,然后将返回的数据自动做类型转换生成对应的model。
理解EF就是吧ADO.NET封装了,只不过有点高级。
在实际项目中,EF有三种模式:
DataBase First
Model First
CodeFirst(优先)
DataBase First 就是根据数据库创建ADO.NET Entity Data Model,生成后直接拿来用CRUP
Model First先创建EDM模型,再生成DDL数据库脚本和模型和数据层代码。除生成实体模型和自跟踪实现模型,支持生成轻型DbContext。
Code First手动创建POCO模型,数据层DbContext及映射关系,通过Database.SetInitializer生成数据库,这种方式较灵活,但是代码工作较多。
实际操作:
Entity层——Data层
引用EntityFramework,在app.config中写上连接字符串:
<connectionStrings>
<add name="User" connectionString="Data Source=.;Initial Catalog=User;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
在建立一个UserContext.cs
namespace Data
{
public class UserContext:DbContext
{
public UserContext() : base("User")
{
///数据库初始值设定项指定的上下文类型禁用初始化
Database.SetInitializer<UserContext>(null);
}
//"User和连接字符串名称相同"
public IDbSet<User> dbUser { get; set; }
//相当于表的映射过程
///保存操作
public virtual void Commit()
{
base.SaveChanges();
}
//在EF中表生成了可能在后面加上复数形式,我们需要重写移除复数形式
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
///移除复数形式
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
}
在控制台输入:
Enable-Migrations (就是启动CODE FIRST迁移)
然后控制台会先检查是否有这个数据库,在启动迁移
会发现出现了Migrations的文件夹,结构如下:
internal sealed class Configuration : DbMigrationsConfiguration<Data.UserContext>
{
public Configuration()
{
//自动迁移启动
AutomaticMigrationsEnabled = false;
}
protected override void Seed(Data.UserContext context)
{
context.dbUser.AddOrUpdate(m=>m.ID,
new Entity.User { ID=1});
}
}
然后Seed方法是初始更新数据的。
然后在控制台上输入:
add-migration Initial
就是初始化迁移,创建一个数据库 Initial 可以是任意名称,作用是用来标识的。
最后就是:
update-database
更新创建数据库了。
指定“-Verbose”标记以查看应用于目标数据库的 SQL 语句。
然后就是最简单的crup了。
操作就是先实例化一个UserContext
在获取里面的表用LINQ语法来进行了。