EF开发流程:本人加班写的EF流程忘记保存了,以下博客也囊括了几部重要的操作,值得参考
EF4.1包括Code First和DbContext API。DbContext API为EF提供更多的工作方式:Code First,Database First和Model First。
使用DbContext构造函数
1. Code First约定连接
namespace Magic.Unicorn
{ public class UnicornsContext : DbContext { public UnicornsContext() // C# will call base class parameterless constructor by default { } }}用Magic.Unicorn.UnicornsContext作为数据库名,在本机上生成该数据库的连接字符串(SQL Express)。
2. Code First指定数据库名称的约定连接
public class UnicornsContext : DbContext
{ public UnicornsContext() : base("UnicornsDatabase") { }}用UnicornsDatabase作为数据库名,在本机上生成该数据库的连接字符串(SQL Express)。
3. Code First用配置文件中的连接字符串,连接的数据库还有精简型的
<connectionStrings>
<add name="UnicornsCEDatabase" providerName="System.Data.SqlServerCe.4.0" connectionString="Data Source=Unicorns.sdf"/> </connectionStrings>public class UnicornsContext : DbContext
{ public UnicornsContext() : base("name=UnicornsCEDatabase") { }}
4. Database/Model First用配置文件中的连接字符
<add name="Northwind_Entities"
connectionString=" metadata=res://*/Northwind.csdl| res://*/Northwind.ssdl| res://*/Northwind.msl; provider=System.Data.SqlClient; provider connection string= "Data Source=.\sqlexpress; Initial Catalog=Northwind; Integrated Security=True; MultipleActiveResultSets=True"" providerName="System.Data.EntityClient"/>public class NorthwindContext : DbContext
{ public NorthwindContext() : base("name=Northwind_Entities") { }}5. Defining sets on a derived context
1) DbSet属性:指定集合为Entity类型
2) IDbSet属性
3) 只读set属性
public IDbSet<Unicorn> Unicorns{get{return Set<Unicorn>();}
6. 利用主键查找实体
DbSet的Find方法,如果用主键在上下文中查找不到实体,就会到数据库中查询。 1)通过主键查找实体 var unicorn=context.Unicorns.Find(3);//查询数据库 var unicornAgain=context.Unicorns.Find(3);//从当前上下文中返回相同的实例(没有查询数据库) 2) 通过主键和外键查找实体 var lady = context.LadiesInWaiting.Find(3, "The EF Castle"); 7. 实体状态和保存 EntityState:Added、Unchanged、Modified、Deleted和Detached 1) 插入一个新的实体到上下文 当调用SaveChanges()才能插入到数据库中。 var unicorn = new Unicorn { Name = "Franky", PrincessId = 1}; context.Unicorns.Add(unicorn);//添加到上下文中 context.SaveChanges();//插入到数据库中另一种插入方法:
var unicorn = new Unicorn { Name = "Franky", PrincessId = 1}; context.Entry(unicorn).State = EntityState.Added; context.SaveChanges();在当前实体的关联实体中添加新的对象:
// Add a new princess by setting a reference from a tracked unicorn var unicorn = context.Unicorns.Find(1); unicorn.Princess = new Princess { Name = "Belle" }; // Add a new unicorn by adding to the collection of a tracked princess var princess = context.Princesses.Find(2); princess.Unicorns.Add(new Unicorn { Name = "Franky" }); context.SaveChanges();8. DbContext中的T-SQL查询
1) SQL语句查询实体 var unicorns = context.Unicorns.SqlQuery( "select * from Unicorns").ToList(); 2) SQL语句查询非实体类型 var unicornNames = context.Database.SqlQuery<string>( "select Name from Unicorns").ToList(); 3) 执行SQL命令 context.Database.ExecuteSqlCommand( "update Unicorns set Name = 'Franky' where Name = 'Beepy'");