首页 > 代码库 > 使用EF 4.1的DbContext

使用EF 4.1的DbContext

 

使用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‘");