Entity Framework 杂碎

其实看图很简单,database first和model first都是通过 data model创建的edmx文件,只不过model first模块可以自己根据需要创建和修改实体,显得更加灵活.
codefist是一个class代码文件,它可以由一些第三方的软件可视化的创建,也是非常灵活的一种方式,目前被使用也是最广泛的.
2, edmx文件的本质就是一个XML文件,它用于定义概念模型、存储模型和这些模型之间的映射。虽然edmx文件默认情况下以实体设计器的方式打开,还可以右击Model.edmx文件以XML文本编辑器打开,这时就可以看到edmx文件的庐山真面目:
从代码中可以看到,edmx大致由SSDL、CSDL、C-S三部分组成,分别对应着对于数据库、实体、数据库表与实体之间的映射这三方面的解析,SSDL中有对数据库表、字段等的规定,CSDL中有对实体名、实体属性等的规定,C-S中有对数据库表与实体之间的映射。一句话总结edmx文件,就是用来解析存储模型、概念模型以及这两者之间的映射,其实也还是上文中那张图片的详细表现。
将 EfModel.tt 文件拆分到 Entity 层,EfModel.Edmx、EfModel.Content.tt 保留在 DAL 层。
设置EfModel.edmx的Code Generation Strategy设为None[确保EFModel.edmx不自动产生代码]
参考:http://www.cnblogs.com/fangrobert/archive/2011/08/22/2150048.html
4,
更新没有设置主键的表
在默认情况下,EF不能对一个没有主键的表进行更新、插入和删除的动作。用xml方式查看edmx文件,可以在SSDL中可以看到如下xml片断(我定义了一个没有主键的表tb_WithoutKey)。

<EntitySet Name="tb_WithoutKey" EntityType="TransferModel.Store.tb_WithoutKey" store:Type="Tables" store:Schema="dbo" store:Name="tb_WithoutKey">
<DefiningQuery>
SELECT
[tb_WithoutKey].[ID] AS [ID],
[tb_WithoutKey].[Name] AS [Name]
FROM [dbo].[tb_WithoutKey] AS [tb_WithoutKey]
</DefiningQuery>
</EntitySet>

我再加入一个有主键的表进行对比,同样的在SSDL中,可以看到有主键的表的定义如下。
<EntitySet Name="tb_WithKey" EntityType="TransferModel.Store.tb_WithKey" store:Type="Tables" Schema="dbo" />
我们把没有主键的<EntitySet>照着上面这个节点进行更改:删除<DefiningQuery>节点,将store:Schema=”dbo”更改为Schema=”dbo”。这样我们就可以对之前没有设置主键的表进行更新、删除以及插入操作了。
无主键的表SSDL定义其实更像是视图,我有一点不明的是store:这个命名空间的作用是什么,为什么只是删除<DefiningQuery>不行,还需要将Schema属性的store命名空间删除才可以。以上都是我还不明白的地方,只是作为一个解决方案,它确实简单可行。
5,
更改Code-First的默认连接
我们知道使用Code-First的时候我们甚至可以不用写连接字符串,但是这个默认的连接只识别本机的SQL Express版数据库,如果你是使用其它数据库甚至就是Sql Server非Express版,都不行。
在不提供任何连接数据库信息的情况下,EF会创建一个默认的DefaultConnectionFactory,这个默认的连接工厂使用的就是SqlConnectionFactory,然后我们可以通过reflector看到它的构造函数如下。
public SqlConnectionFactory()
{
this._baseConnectionString = @"Data Source=.\SQLEXPRESS; Integrated Security=True; MultipleActiveResultSets=True";
}
所以说EF默认只能连Sql Express版的数据库。SqlConnectionFactory提供一个构造函数重载,可以指定连接字符串,修改默认的数据库连接,我们可以在配置文件中添加以下节点进行配置。

<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework">
<parameters>
<parameter value="Data Source=heqichang-pc; Integrated Security=True; MultipleActiveResultSets=True" />
</parameters>
</defaultConnectionFactory>
</entityFramework>

不过不管怎样,我觉得还是指定好连接字符串来开发比较好,排除各种不可控的因素。
参考:http://www.cnblogs.com/heqichang/archive/2012/10/15/2723906.html
6,ef power tools去直接生成codefirst的模型,去掉 edmx 文件。
Entity Framework Power Tools Beta 4 https://visualstudiogallery.msdn.microsoft.com/72a60b14-1581-4b9b-89f2-846072eff19d
http://www.cnblogs.com/LingzhiSun/archive/2011/05/24/2055761.html
http://www.cnblogs.com/LingzhiSun/archive/2011/04/13/EF41_WokingWithProperties.html
Entity Framework 常见的问题解决
7,
通过Model First的方式+ADO.NET DbContext Generator生成器 实现Code First方式业务(EDMX通过DbContext构造注入其中),到达Hibernate的效果。EDMX相当于Hibernate
对象模型XML映射文件,POCO相当于Hibernate对象模型(virtual实现关联导航加载),DbContext通过泛型构建IRepository数据操作类。
Entity Framework 杂碎的更多相关文章
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库
在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...
- Entity Framework Core 1.1 升级通告
原文地址:https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-entity-framework-core-1-1/ 翻译:杨晓东 ...
- Entity Framework Core 实现MySQL 的TimeStamp/RowVersion 并发控制
将通用的序列号生成器库 从SQL Server迁移到Mysql 遇到的一个问题,就是TimeStamp/RowVersion并发控制类型在非Microsoft SQL Server数据库中的实现.SQ ...
- 采用MiniProfiler监控EF与.NET MVC项目(Entity Framework 延伸系列1)
前言 Entity Framework 延伸系列目录 今天来说说EF与MVC项目的性能检测和监控 首先,先介绍一下今天我们使用的工具吧. MiniProfiler~ 这个东西的介绍如下: MVC Mi ...
- 来,给Entity Framework热热身
先来看一下Entity Framework缓慢的初始化速度给我们更新程序带来的一种痛苦. 我们手动更新程序时通常的操作步骤如下: 1)把Web服务器从负载均衡中摘下来 2)更新程序 3)预热(发出一个 ...
- 采用EntityFramework.Extended 对EF进行扩展(Entity Framework 延伸系列2)
前言 Entity Framework 延伸系列目录 今天我们来讲讲EntityFramework.Extended 首先科普一下这个EntityFramework.Extended是什么,如下: 这 ...
- Entity Framework教程(第二版)
源起 很多年前刚毕业那阵写过一篇关于Entity Framework的文章,没发首页却得到100+的推荐.可能是当时Entity Framework刚刚发布介绍EF的文章比较少.一晃这么多年过去了,E ...
- Entity Framework 6 Recipes 2nd Edition 译 -> 目录 -持续更新
因为看了<Entity Framework 6 Recipes 2nd Edition>这本书前面8章的翻译,感谢china_fucan. 从第九章开始,我是边看边译的,没有通读,加之英语 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点
在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...
随机推荐
- 如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码
如何在Exe和BPL插件中实现公共变量共享及窗口溶入技术Demo源码 1.Delphi编译方式介绍: 当我们在开发一个常规应用程序时,Delphi可以让我们用两种方式使用VCL,一种是把VCL中的申明 ...
- Python之路----文件操作
文件操作 1.能调用方法的一定是对象,比如数值.字符串.列表.元组.字典,甚至文件也是对象,Python中一切皆为对象. str1 = 'hello' str2 = 'world' str3 = ' ...
- WPF 渐隐渐现切换背景图片
最近学习WPF,尝试着自己做一些小玩意,也遇到了一些问题,于是整理记录以便日后查阅. 我们都知道WPF可以实现一些很炫的效果,然而有时候为达到这个目的却并不是一件很容易的事情.比如:在软件中我希望能够 ...
- Java基础中的一些注意点
1.在Java编程语言中,标识符是赋予变量.类或方法的名称.标识符可从一个字母.下划线(_)或美元符号($)开始,随后也可跟数字.标识符是大小写区别对待的并且未规定最大长度. 2.Java技术源程序采 ...
- Angular2-之开发环境搭建/调试环境配置
很多网友发表了学习Angualr2的方法,今天我也分享我的学习过程,这篇文章暂且谈谈用到的工具. 1. Visual Studio Code 2. NodeJs 如果你不在天朝请直接去第三步.否则你还 ...
- vs2013 上传碰到的问题:“输入的不是有效的 Base-64 字符串 ”
action 代码: [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create( ImageStoreModels images ...
- sharepoint 2013 sp1
http://www.microsoft.com/en-us/download/details.aspx?id=42544 http://soussi-imed.over-blog.com/artic ...
- 视频边下边播--缓存播放数据流-b
google搜索“iOS视频变下边播”,有好几篇博客写到了实现方法,其实只有一篇,其他都是copy的,不过他们都是使用的本地代理服务器的方式. 原理很简单,但是缺点也很明显,需要自己写一个本地代理服务 ...
- 微软Hololens学院教程-Hologram 211-Gestures(手势)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 使用flask的时候遇到的问题及其解答
在网上看到了mircoblog的这个web程序,用flask框架写的,自己就在windows的环境下实现了下. 1.这个博客系统用到了一个flask插件叫flask_Login 里面涉及到编码解码的问 ...