一.在多表关联中,一个表中有另一个表的model累,在Include方法里提示lambda表达式不是委托类型,这时候需要using System.Data.Entity; 二.插入数据时,主键并非自增的时候,这个时候插入会报错,无论你怎么赋值ID,ef都是取不到的 两种解决办法: 1.modelBuilder.Entity<PostBody>().Property(p => p.ID) .HasDatabaseGeneratedOption(DatabaseGeneratedOption…
Entity Framework中的实体类型 : 在之前的章节中我们介绍过从已有的数据库中创建EDM,它包含数据库中每个表所对应的实体.在EF 5.0/6.0中,存在POCO 实体和动态代理实体两种. POCO Entity (Plain Old CLR Object): POCO类是不依赖任何框架的类型,如同其他正常的一般类型,我们称之为"Plain Old CLR Objects"(这里不知道怎么翻译,普通的CLR对象?古老的CLR对象?大概意思就是没有什么特殊的对象吧). POC…
关于Entity Framework中的Attached报错的问题,我这里分为以下几种类型,每种类型我都给出相应的解决方案,希望能给大家带来一些的帮助,当然作为读者的您如果觉得有不同的意见或更好的方法,欢迎一起探讨! 1.单个实体对象在进行改删时出现Attached报错,解决方案,请参见: http://www.cnblogs.com/zuowj/p/4523075.html http://www.cnblogs.com/scy251147/p/3688844.html 原理:清除context…
之前发表过一篇文章题为<关于Entity Framework中的Attached报错的完美解决方案>,那篇文章确实能解决单个实体在进行更新.删除时Attached的报错,注意我这里说的单个实体,指的是要更新或删除的实体不包含其它实体(比如导航属性就包含其它实体),也就是简单POCO对象:但如果不是呢?那么那篇文章里的方法在一定程度上不起作用了,仍会报错,我开始也想不明白,明明通过IsAttached函数判断要更新的实体并未Attached,但进行Attaching时但仍然报错说有相同Key,开…
本文转自:http://diaosbook.com/Post/2012/9/21/linq-paging-in-entity-framework 我们知道,内存分页效率很低.并且,如果是WebForm的项目,页面上会有巨型ViewState,这必然不好.我自己博客用的是一个存储过程做的分页,用到现在都挺好,没有任何效率问题.后来想到,既然项目里有Entity Framework,那为什么不利用EF完成分页呢- 稍做研究之后发现,EF分页其实很简单.不过一样写文章了,光贴代码是不负责的,还是得稍微…
继续为想使用Entity Framework的朋友在前面探路,分享的东西虽然技术含量不高,但都是经过实践检验的. 在Entity Framework中使用事务很简单,将操作放在TransactionScope中,并通过Complete()方法提交事务即可. 示例代码如下: TransactionScope的命名空间在System.Transactions下 using (BlogDbContext context =new BlogDbContext()) { using (Transactio…
在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数. 要使用批量修改或者批量删除数据,就需要SaveChanges(false)+AcceptAllChanges()方法了. SaveChanges(false) 只是通知EF需要对数据库执行的操作,在内存中是属于挂起状态,在必要的时候是可以撤销的,比如AcceptAllChange()提交为真正成功,EF将撤销SaveChanges(false)的操作…
ASP.NET Entity FrameWork中: int flag = -1; if (this.URPmanagementEntities1.Connection.State != System.Data.ConnectionState.Open) { this.URPmanagementEntities1.Connection.Open(); } var trans = this.URPmanagementEntities1.Connection.BeginTransaction();…
Lazy<T>在Entity Framework中的性能优化实践(附源码) 2013-10-27 18:12 by JustRun, 328 阅读, 4 评论, 收藏, 编辑 在使用EF的过程中,导航属性的lazy load机制,能够减少对数据库的不必要的访问.只有当你使用到导航属性的时候,才会访问数据库.但是这个只是对于单个实体而言,而不适用于显示列表数据的情况. 这篇文章介绍的是,使用Lazy<T>来提高显示列表页面的效率. 这里是相关的源代码 PerformanceTest.…
在.Net开发中,Entity framework是微软ORM架构的最佳官方工具.我们可以使用Lambda表达式在Entity framework中DbSet<T>类上直接做查询(比如使用DbSet<T>类的Where.First.Count等查询函数)返回数据库结果实体. 不知道大家有没有注意到DbSet<T>类上的很多查询函数都有两种类型的重载,就拿Where这个查询函数举例: 一种是传入Func<Tsource, bool>委托作为参数 public…
在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework 中使用join函数可以实现inner join,那么怎么才能在lambda表达式中实现left join呢?秘诀就是在join后面加上一个函数DefaultIfEmpty函数,实际上这个函数在linq中貌似也只有将inner join转换为left join的作用,示例如下 var joinRes…
1. Concurrency的作用 场景 有个修改用户的页面功能,我们有一条数据User, ID是1的这个User的年龄是20, 性别是female(数据库中的原始数据) 正确的该User的年龄是25, 性别是male 这个时候A发现User的年龄不对, 就给改成25, 那么在Entity Framework中,我们会这样做. ); //B用户在这里完成修改了User的性别 user.age = ; dbContext.SaveChanges(); 但是加入在上面注释处,有个B用户发现性别不对,…
        在Entity Framework中有三种加载的方式,分别是延迟加载,自动加载和显示加载.下面用一个例子来说明:现在有两个表,一个是资料表(Reference),另外一个表是资料分类表(Catalog).一个资料属于某一个分类,但是一个分类下可以包含多个资料.是一个一对多的关系.        两个实体类代码如下: public partial class Catalog { public Catalog() { this.References = new List<Refere…
问: I would like know what is the best possible way to implement transactions with DBContext. In particular, Does DbContext.SaveChanges implement transaction internall if i change multiple entities? If i want to call DbContext.SaveChanges multiple tim…
继承关系映射到数据库表中有多种方式: 第一种:TPH(table-per-hiaerachy) 每一层次一张表 (只有一张表) 仅使用名为父类的类型名的一张表,它包含了各个子类的所有属性信息,使用区分列(Disciriminator column)(通常内容为子类的类型名)来区分哪一行表示什么类型的数据. 第二种:TPT(Table-per-type) 每种类型都有一张表(父类及每个子类都有表) 父类.各子类各自都有一张表.父类的表中只有共同的数据,子类表中有子类特定的属性.TPT很像类的继承结…
在使用Entity Framework 访问数据库时,我们经常使用Lambda表达式,但是如果不小心的话,很容易就掉到坑里了.比如下面的例子:用Lambda访问MSSqlServer中的NewsInfo表中id小于20的记录. 代码如下: 运行程序,程序工作正常.打开SQL Server Profiler 跟踪EF生成的SQL语句,结果如下: 这正是我们想要的SQL语句.下面我们将程序改一下,把Lambda表达式以参数的形式传递给一个方法GetNewsList(Func<NewsInfo, bo…
问题的本质是:扩展的Where方法有四个参数重载.传进去Func<T,true>那么返回值是IEnumable的接口类型的集合,如果是Expression<Func<T,true>>那么返回的是IQueryable类型的接口集合. 而IQueryable接口类型的集合是支持延迟加载和自动根据条件生成sql的. 在使用Entity Framework 访问数据库时,我们经常使用Lambda表达式,但是如果不小心的话,很容易就掉到坑里了.比如下面的例子:用Lambda访问M…
我们在使用Entity Framework进行CRUD时,为了提升查询效率,一般均会启动NoTracking,即不追踪变化,设置代码如下: //这是DB First模式下设置方法: aTestEntities db = new aTestEntities(); db.Companies.MergeOption = MergeOption.NoTracking; //这是CODE First及Model First模式下设置方法: aTestEntities db = new aTestEntit…
这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家. 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到了这种方式所带来的便利.这里将我的一些理解分享出来. 需要了解的概念 Ÿ POCO POCO(Plain Old CLR Object)的概念是从java的POJO借用而来,而两者的含义是一致的,不同的仅仅是使用的语言不一样.所以POCO的解释就是“Plain Old C# Object”.POJO…
看完觉得不错,适合作为学习资料,就转载过来了 原文链接:http://www.cnblogs.com/Wayou/archive/2012/09/20/EF_CodeFirst.html 这是上周就写好的文章,是在公司浩哥的建议下写的,本来是部门里面分享求创新用的,这里贴出来分享给大家. 最近在对MVC的学习过程中,接触到了Code First这种新的设计模式,感觉很新颖,并且也体验到了这种方式所带来的便利.这里将我的一些理解分享出来. 需要了解的概念 Ÿ POCO POCO(Plain Old…
如果你还没有接触过或者根本不了解什么是Entity Framework,那么请看这里http://www.entityframeworktutorial.net/EntityFramework-Architecture.aspx,其中的一系列文章以非常简单易懂的形式一步步介绍了Entity Framework的一些基本概念和操作方法.一句话,Entity Framework是微软新的数据操作框架,在项目中引入Entity Framework可以极大的方便开发人员完成程序与数据库的各种操作.在早期…
Entity Framework 6以前,框架本身并没有提供显式的事务处理方案,在EF6中提供了事务处理的API. 所有版本的EF,只要你调用SaveChanges方法进行插入.修改或删除,EF框架会自动将该操作进行事务包装.这种方法无法对事务进行显式的控制,例如新建事务等,可能会造成事务的粒度非常大,降低效率.EF不会对查询进行事务包装. 从EF6开始,默认情况下,如果每次调用Database.ExecuteSqlCommand(),如果其不在存在于任何事务中,则会将该Command包装到一个…
1.自从用上了Entity Framework(简称EF),妈妈再也不用担心我要写那么复杂的SQL语句了! 这是微软新一代的ORM工具,它能够将数据库的表中的记录映射成为程序中的一个对象,当然也能够将对象映射为数据库中的一条记录. 它支持三种模式Model First.Database First.Code First. 我们准备用那种方式呢?Code First.为什么呢?因为这只要写一次代码,而且不用去修改数据库. 那么,我们如果修改了代码,增加了一个字段,在model中写了之后,怎么自动修…
Entity Framework 4.0 中是这样的,高版本的跟这个有些差异,不太一样,貌似已经到7了 using (Entities entities = new Entities()) { var query = from st in entities.ShiTi select st; ObjectQuery oq = query as ObjectQuery; string sql = oq.ToTraceString(); Console.WriteLine(sql); }…
本文转载:http://www.cnblogs.com/dudu/archive/2011/01/29/entity_framework_connection_string.html 如果EF在使用实体模型时候,即model first 和db first 时候,则 Entity Framework使用的连接字符串与ADO.NET是不同的,见下图: 相比于ADO.NET,Entity Framework的连接字符串不仅要存放metadata配置信息,还要存放完整的数据库连接字符串(上图中的"pr…
原文:http://www.cnblogs.com/hiteddy/archive/2011/10/01/Difference_among_IQueryable_IEnumeralb_IList_in_Entity_Framework.html 使用工具追踪EF生成的SQL 使用Entity Framework等ORM框架的时候,SQL对于使用者来说是透明的,往往很多人也不关心ORM所生成的SQL,然而系统出现性能问题的时候就必须关注生成的SQL以发现问题所在. 使用过Toplink的朋友知道很…
Entity Framework (简称 EF) 发展到现在, 版本已经进入 6.1.0, 距离我写的「在 VS2013 以 Code First 方式建立 EF 资料库」这篇文章已有半年的时间.如果你和我一样从那时候开始使用 EF Code First, 那么你对 EF 应该已经有了基本的了解.依我个人的使用经验, EF 虽然好用, 但是如果一直使用 AutomaticMigrations 的方式维护你的资料库, 也许会遇到一些麻烦.因为在正常作业环境下, 资料库的格式不可能永远不变; 当我们…
在使用Entity Framework时,会注意到下面这句: protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema("DEV"); ..... } 如果是sql server的话,写上dbo. 就行了 如果是oracle的话,写上“用户名”. 如果schema是用户的话,那为什么不叫HasDefaultUser呢? 非要叫个schema,弄…
EF框架对数据库的连接提供了一系列的默认行为,通常情况下不需要我们太多的关注.但是,这种封装,降低了灵活性,有时我们需要对数据库连接加以控制. EF提供了两种方案控制数据库连接: 传递到Context的连接: Database.Connnection.Open(): 下面详解. 传递到Context的连接 EF6之前版本 有两个接受Connection的构造方法: public DbContext(DbConnection existingConnection, bool contextOwns…
前段时间,在公司做项目时,引入Entity Framework Code First的方法. 我们公司的软件为SaaS结构,有N个企业注册,其中SQL Server中有一张表为t_User_企业注册号,比如第1000个来注册的企业,为它生成t_User_1000这张数据表. 这种方式下,如何生成User对象跟数据表的对应关系呢?直接在OnModelCreating里面直接ToTable来绑定? 如果稍懂点Entity Framework的实现细节,这种方式实现有一个很大的问题,就是OnModel…