使用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= "Data Source=.\sqlexpress; Initial Catalog=Northwind; Integrated Security=True; MultipleActiveResultSets=True"" 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'" ); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器