首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

运用EF 4.1的DbContext

2012-12-18 
使用EF 4.1的DbContext简述:EF4.1包括Code First和DbContext API。DbContext API为EF提供更多的工作方式:Co

使用EF 4.1的DbContext

简述: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=
???????? &quot;Data Source=.\sqlexpress;
?????????????? Initial Catalog=Northwind;
?????????????? Integrated Security=True;
?????????????? MultipleActiveResultSets=True&quot;"
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'");

热点排行