Entity Framework Model First下改变数据库脚本的生成方式
    
            
摘要:Entity Framework Model First下改变数据库脚本的生成方式在Entity Framework Model First下, 一个非常常见的需求是改变数据库脚本的生成方式。这个应用场景是指,当用户在Designer上单击鼠标右键,然后选择Generate Database from Model选项,此时Entity Framework Model First会根据模型产生数据库SQL脚本,并将SQL脚本文件添加到解决方案资源管理器中。事实上,这个自动化产生的数据库SQL脚本还是会有一些局限性。比如:Model上支持DateTime这一CLR类型,在自动化SQL生成的过程中,
        
阅读全文
摘要:Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成前言Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能。由于在 09 年最初设计时,ORM 部分的设计并不是最重要的部分,那里 Rafy 的核心是产品线工程、模型驱动开发、界面生成等。所以当时,我们简单地采用了一个开源的小型 ORM 框架:《Lite ORM Library》。这个 ORM 框架可以生成比较简单的 Sql 语句,以处理一般性的情况。随着不断使用,我们也不断对 ORM 的源码做了不少改动,让它在支持简单语句生成的同时,也支持让开发人员
        
阅读全文
摘要:Data Annotations Entity FrameworkCode First利用一种被称为约定(Conventions)优于配置(Configuration)的编程模式允许你使用自己的domain classes来表示EF所依赖的模型去执行查询、更改追踪、以及更新功能,这意味着你的domain classes必须遵循EF所使用的约定。然而,如果你的domain classes不能遵循EF所使用的约定,此时你就需要有能力去增加一些配置使得你的classes能够满足EF所需要的信息。 Code First提供了两种方式来配置你的类:DataAnnotations, 使用简单属性;Fl..
        
阅读全文
摘要:dapper 扩展插件: Rainbow dapper 是一个效率非常高的orm 框架 ,效率要远远大于 我们大微软的EF . 它只有一个类文件,非常之小。 1,首先下载dapper 这里下载 . 2,下载插件 Rainbow 在Package Manager Console 中输入1PM> Install-Package Dapper.Rainbow 准备工作 完成 下面是 demo 。using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Data.S
        
阅读全文
摘要:MiniProfiler 兼容 Entity Framework 6一直以来都是在用MiniProfiler配合ASP.NET MVC做请求的监控。在某项目升级Entity Framework 6之后,在执行查询时报错误:--------------无法将类型为“StackExchange.Profiling.Data.EFProfiledDbConnection”的对象强制转换为类型“System.Data.SqlClient.SqlConnection”。----------显然是新版本的EntityFramework中增加了EntityFramework.SqlServer所以导致此错误
        
阅读全文
摘要:EntityFramework:再谈 “如何映射聚合?”目录背景使用多主键映射三级聚合如果是逻辑删除,需要注意哪些事项?为啥不用级联删除?备注背景返回目录在之前的文章中《DDD:使用EntityFramework的话,如果只为聚合根设计仓储,其它实体如何处理?》,我介绍了如何映射聚合以保证其语义,当时的结论是:聚合内除了聚合根之外的实体必须使用多主键,否则删除操作(Order.OrderItems.Remove(1))只会将外键更新为 Null,最开始学习如何使用 EntityFramework 来映射聚合的时候,就纠结这个问题,当时汤雪华大哥就告诉了更新为 Null 就算删除了,当时感觉是接
        
阅读全文
摘要:Hibernate:不容易理解的 lock 和 merge目录背景Lock官方的注释LockMode.NONELockMode.READLockMode.UPGRADEMerge官方注释detached 对象测试unsaved 对象测试备注背景返回目录lock 和 merge 在字面上很容易理解它们的语义,不过它们的实际行为所代表的语义范围要大一点,本文就简单的记录下来,还请朋友们多批评和指正。Lock返回目录官方的注释返回目录 1 /** 2 * Obtain the specified lock level upon the given object. This may ...
        
阅读全文
摘要:.NET 利用反射将对象数据添加到数据库一些小型的项目,在不使用其他的框架(LINQ,NHibernate,EF等等框架)的前提下,这时候一些反复的增删改查就会让我们感到极其的繁琐,厌烦,为了避免这种情况出现,本人写了一个小的工具类.自动将实体类添加到数据库.实现功能的思路: 1,通过反射获取该对象名称和所有属性名称,然后组合成insert SQL字符串 (前提是对象属性名称和数据库字段名称一致,表名称和实体类名称一致.不区分大小写). 2,通过反射获取该对象的每个属性值,并动态的往已经定义好的SqlParameter数组里添加SqlParameter, SqlParameter参数的...
        
阅读全文
摘要:使用PetaPoco结合注入实现业务级事务PetaPoco是一个轻量级ORM,我的MVC项目中使用它结合Repository模式,依靠Unity的生命周期管理对象,保证请求/线程级别的数据上下文单例,并使用锁和计数实现业务级事务。下文代码依个人理解实现,谬误请不吝指正。例行IUnitOfWork:public interface IUnitOfWork{ void Begin(); void Commit(); void Rollback();}仓库上下文核心: 1 public class PetaPocoUnitOfWork : IUnitOfWork 2 { 3 ...
        
阅读全文
摘要:Entity Framework做IN查询2013-09-14 11:43 by JustRun,599阅读,9评论,收藏,编辑开发中遇到的Too high level of nesting for select错误项目使用了Entity Framework结合Mysql, 遇到了一个非常奇怪的性能问题,一个看起来非常简单的查询通过不了。报出错误, “Too high level of nesting for select”。整个查询非常简单,只是从表中取到属于一个集合中的id的数据, 比如从表中取到OfficeId 是1, 2,3,6的数据。Expression> filter = o
        
阅读全文
摘要:EntityFramework与TransactionScope事务和并发控制最近在园子里看到一篇关于TransactionScope的文章,发现事务和并发控制是新接触Entity Framework和Transaction Scope的园友们不易理解的问题,遂组织此文跟大家共同探讨。首先事务的ACID特性作为最基础的知识我想大家都应该知道了。ADO.NET的SQLTransaction就是.NET框架下访问SqlServer时最底层的数据库事务对象,它可以用来将多次的数据库访问封装为“原子操作”,也可以通过修改隔离级别来控制并发时的行为。TransactionScope则是为了在分布式数据节
        
阅读全文
摘要:目录背景使用EntityFramework持久化聚合备注背景返回目录DDD中只有聚合根可以有仓储,仓储负责整个聚合持久化的相关生命周期,在不使用工作单元或POCO的情况下,我们可以让Order内部直接调用DAL操作OrderItem。我们也可以让Order跟踪所有OrderItem的状态,然后在OrderRepository内部操作OrderItem。如果我们采用了重量级的ORM工具,如:EntityFramework,事情会不会变得简单呢?使用EntityFramework持久化聚合返回目录关键思路:双主键。示例聚合这里以订单和订单项为例。Order管理OrderItem 1 ...
        
阅读全文
摘要:EF里查看/修改实体的当前值、原始值和数据库值以及重写SaveChanges方法记录实体状态本文目录查看实体当前、原始和数据库值:DbEntityEntry查看实体的某个属性值:GetValue方法拷贝DbPropertyValues到实体:ToObject方法修改DbPropertyValues当前值:索引器克隆实体:Clone方法设置实体的值:SetValues方法克隆实体:SetValues获取和设置实体的单个属性:Property方法查询实体的属性是否被修改:IsModified方法修改导航属性重新加载实体:Reload方法读取相关联的实体和状态:DbContext.ChangeTra
        
阅读全文
摘要:目录背景之前是如何做的?EntityFramework5提供了更好的选择备注背景返回目录刚毕业做项目的时候,没有用“迁移”这个概念,系统发布和更新的过程让人非常痛苦,在学习 Ruby On Rails 的过程解除了“迁移”,以后的所有项目都会先确定好“迁移”的方案,本文介绍一下EntityFramework5提供的迁移工具。之前是如何做的?返回目录原始的迁移脚本脚本格式 1 --执行开始-- 2 3 Alter Table RcExaminees ADD [IntroducerOfEmployeeId] uniqueidentifier null 4 5 --执行结束-- 6 7...
        
阅读全文
摘要:Entity Framework 5.0系列之约定配置Code First之所以能够让开发人员以一种更加高效、灵活的方式进行数据操作有一个重要的原因在于它的约定配置。现在软件开发越来复杂,大家也都试图将软件设计的越来越灵活,很多内容我们都希望是可配置的,但是过多的配置也会带来很大的工作量,解决这个问题的方法就是约定。对于一些简单的,不太可能经常变化的内容我们以一种约定的方式进行设计。使用过其他ORM框架的朋友可能知道一般ORM都有对应的映射配置文件(一般是一个Xml文件),但是EF并没有。在EF中是以一种约定的方式进行表、列同实体类进行映射的,与此同时为了提高最大的灵活性EF中可以通过Flue
        
阅读全文
摘要:分享基于Entity Framework的Repository模式设计(附源码)关于Repository模式,在这篇文章中有介绍,Entity Framework返回IEnumerable还是IQueryable?这篇文章介绍的是使用Entity Framework实现的Repositoy模式设计,欢迎各位拍砖.阅读目录:一、实现的思路和结构图二、Repository设计具体的实现代码三、Repository设计的具体的使用四、总结一,实现的思路和结构图总结一下,Repository在实际使用中,有下面三种特点:Repository的共同性有一些公共的方法(增删改查), 这些方法无关于Repo
        
阅读全文
摘要:使用EF自带的EntityState枚举和自定义枚举实现单个和多个实体的增删改查本文目录使用EntityState枚举实现单个实体的增/删/改增加:DbSet.Add = > EntityState.Added标记实体为未改变:EntityState.Unchanged修改:EntityState.Modified删除:DbSet.Remove = > EntityState.DeletedEF里实体状态的递归(recursive)不被上下文追踪的情况下实现增删改操作让实体实现自定义的IObjectWithState接口来设置实体状态通用的转换实体状态方法本文源码和系列文章目录之前
        
阅读全文
摘要:数据更新最佳实践〇、目录一、前言二、整体更新(不考虑更新属性) 情景一:同一上下文中数据取出来更新后直接保存 情景二:从上下文1中取出数据并修改,再上下文2中进行保存 情景三:在情景二的基础上,上下文2中已存在同主键数据 整体更新最佳实现三、按需更新(考虑更新属性) 需求分析 需求实现 封装设计分析 按需更新的最佳实现四、源码获取系列导航一、前言 最近在整理EntityFramework数据更新的代码,颇有体会,觉得有分享的价值,于是记录下来,让需要的人少走些弯路也是好的。 为方便起见,先创建一个控制台工程,使用using(var db = new DataContext)的形式来一步一步..
        
阅读全文
摘要:打造Orm经典,创CRUD新时代,Orm的反攻战让我们开启数据库无Linq、零sql时代(续)第一部分MQLqq群:225656797demo下载:点此下载(既然下载,就支持该文,关注我的博客)1.MQL概述MQL是Moon.Orm 5.0中的全新设计,是在之前版本的革命性的升级.目的在于让我们的数据库开发打造为无Linq、零sql.它全面贴近标准sql,噪音低.原生.NET2.0支持、高性能、语法糖.多数库多数据源支持、操作便捷简单. 使用场景:1.NET 2.0; 2.觉得其他Orm性能低;3不喜欢linq;4.想更加便捷用sql 说明:一下以sqlserver为例.2.MQL查询...
        
阅读全文
摘要:自动生成Code First代码在前面的文章中我们提到Entity Framework的“Code First”模式也同样可以基于现有数据库进行开发。今天就让我们一起看一下使用Entity Framework Power Tools如何基于现有数据库生成数据类和数据库上下等。Entity Framework Power Tools基于现有数据库生成POCO数据类和数据库上下文需要借助Visual Studio一个扩展插件-- Entity Framework Power Tools(一个Code First反向工程工具)。只要在Visual Studio扩展里面输入“Entity Framew
        
阅读全文