随笔 - 432  文章 - 0  评论 - 15  阅读 - 63万

使用EF 4.1的DbContext的方法大全

简述:EF4.1包括Code First和DbContext API。DbContext API为EF提供更多的工作方式:Code First,Database First和Model First。

使用DbContext构造函数

1. Code First约定连接

1
2
3
4
5
6
7
8
9
10
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指定数据库名称的约定连接

1
2
3
4
5
6
7
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>

 

 

 

1
2
3
4
5
6
7
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"/> 
复制代码

 

 

 

1
2
3
4
5
6
7
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)通过主键查找实体

1
2
var unicorn=context.Unicorns.Find(3);//查询数据库
var unicornAgain=context.Unicorns.Find(3);//从当前上下文中返回相同的实例(没有查询数据库)

 

  


   2) 通过主键和外键查找实体

1
var lady = context.LadiesInWaiting.Find(3, "The EF Castle");


7. 实体状态和保存

   EntityState:Added、Unchanged、Modified、Deleted和Detached

   1) 插入一个新的实体到上下文

      当调用SaveChanges()才能插入到数据库中。

1
2
3
var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};
context.Unicorns.Add(unicorn);//添加到上下文中
context.SaveChanges();//插入到数据库中

 

     另一种插入方法:

1
2
3
var unicorn = new Unicorn { Name = "Franky", PrincessId = 1};
context.Entry(unicorn).State = EntityState.Added;
context.SaveChanges();

 

     在当前实体的关联实体中添加新的对象:

1
2
3
4
5
6
7
8
9
// 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语句查询实体

1
2
var unicorns = context.Unicorns.SqlQuery(
             "select * from Unicorns").ToList();


     2) SQL语句查询非实体类型

1
2
var unicornNames = context.Database.SqlQuery<string>(
                 "select Name from Unicorns").ToList();


     3) 执行SQL命令

1
2
context.Database.ExecuteSqlCommand(
 "update Unicorns set Name = 'Franky' where Name = 'Beepy'");

 

 

posted on   狼来了  阅读(976)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8

点击右上角即可分享
微信分享提示