在Entity Framework中重用现有的数据库连接字符串

本文转载: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配置信息,还要存放完整的数据库连接字符串(上图中的"provider connection string"部分)。

这样的设计有两个不足之处:

1. 连接字符串配置复杂;

2. 无法重用现有的ADO.NET数据库连接字符串。

 

我在技术推广中这么写的:
public class DALBase
{
    public NWEntities NWContext { get; set; }

    public DALBase()
    {
        string providerString = ConfigurationManager.ConnectionStrings[connectionStringName].ConnectionString;
        string conn = GetEntityConnString(providerString);
        NWContext = new NWEntities(conn);
    }

    private string GetEntityConnString(string providerString)
    {
        EntityConnectionStringBuilder entityBuilder = new EntityConnectionStringBuilder();
        //Metadata属性的值,是从向导生成的Config粘贴过来的
        entityBuilder.Metadata = "res://*/NW.csdl|res://*/NW.ssdl|res://*/NW.msl";
        entityBuilder.ProviderConnectionString = providerString;
        entityBuilder.Provider = "System.Data.SqlClient";

        return entityBuilder.ToString();
    }
}

注意上面中的 entityBuilder.Metadata = "res://*/NW.csdl|res://*/NW.ssdl|res://*/NW.msl";

metadata:指明.csdl/.ssdl/.msl三个文件的路径,要与你的edmx文件名称一致。

web.config文件如下:

Entity FreamWork配置文件方式<add name="LGSCMSEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;Server=zengfanlong;database=LGSCMS;uid=sa;pwd=123456;&quot;" providerName="System.Data.EntityClient" />

ADO.NET方式配置文件
<add name="LGSCMSEntities" connectionString="Server=zengfanlong;database=LGSCMS;uid=sa;pwd=123456;"/>

 

时间: 2024-10-25 11:52:50

在Entity Framework中重用现有的数据库连接字符串的相关文章

在Entity Framework中使用存储过程(四):如何为Delete存储过程参数赋上Current值?

继续讨论EF中使用存储过程的问题,这回着重讨论的是为存储过程的参数进行赋值的问题.说得更加具体一点,是如何为实体映射的Delete存储过程参数进行赋值的问题.关于文中涉及的这个问题,我个人觉得是EF一个有待改进的地方,不知道各位看官是否同意? 目录 一.EF存储过程参数赋值的版本策略 二.Delete存储参数就一定是Original值吗? 三.如果直接修改.edmx模型的XML呢? 四.为Delete存储过程参数赋上Current值,如何做得到? 一.EF存储过程参数赋值的版本策略 和传统的基于

在Entity Framework中使用存储过程(二):具有继承关系实体的存储过程如何定义?

在<实现存储过程的自动映射>中,我通过基于T4的代码生成实现了CUD存储过程的自动映射.由于映射的都是基于数据表结构的标准的存储过程,所以它们适合概念模型和存储模型结构相同的场景.如果两种模型存在差异,在进行数据更新操作的时候就会出错.本篇文章主要介绍当概念模型中具有继承关系的两个实体映射到数据库关联的两个表,如何使用存储过程. 目录 一.创建具有继承关系的实体 二.基于继承关系实体的查询与更新 三.映射标准的CUD存储过程 四.修正存储过程 一.创建具有继承关系的实体 假设数据库中有如下两个

学习Entity Framework 中的Code First

这是上周就写好的文章是在公司浩哥的建议下写的本来是部门里面分享求创新用的这里贴出来分享给大家.   最近在对MVC的学习过程中接触到了Code First这种新的设计模式感觉很新颖并且也体验到了这种方式所带来的便利.这里将我的一些理解分享出来. 需要了解的概念 POCO POCOPlain Old CLR Object的概念是从java的POJO借用而来而两者的含义是一致的不同的仅仅是使用的语言不一样.所以POCO的解释就是"Plain Old C# Object".POJO的内在含义

Entity Framework中的全角半角符号问题

SQL Server的SQL查询不区分大小写,而LINQ查询区分大小写,所以在写LINQ代码时需要注意的是 --如果这段LINQ代码将会被Entity Framework解析为SQL语句(LINQ to Entities),则不 用考虑大小写问题:如果这段LINQ代码在内存中执行,就要考虑大小写的问题. 比如下面的LINQ to Entities(不用考虑大小写): //代码自来CNBlogsTagService _unitOfWork.Set<Tag>().Where(x => tag

【转】Entity Framework中出现&quot;已有打开的与此命令相关联的 DataReader,必须首先将它关闭。&quot;的解决方案

     from:http://www.cnblogs.com/china0zzl/archive/2009/08/06/1540025.html        前期搭建一个ASP.NET MVC应用的框架过程中,使用了Entity Framework框架作为数据处理部分.其中在Linq to Entity操作过程中偶出现 "已有打开的与此命令相关联的 DataReader,必须首先将它关闭."该问题,经查善友老大的文章找到一链接,得以解决该问题:http://www.netknow

在Entity Framework 中执行T-sql语句

从Entity Framework 4开始在ObjectContext对象上提供了2个方法可以直接执行SQL语句:ExecuteStoreQuery 和 ExecuteStoreCommand. 1.使用ExecuteStoreQuery :通过sql查询返回object实体,有有许多需要注意: 1.sql = "select from Payment where Vendor= @vendor";之所以能写成select 是因为Payment对象的属性和表的字段命名完全一致,如果不一

asp.net2.0中读取web.config数据库连接字符串2种方法

asp.net|web|数据|数据库|数据库连接|字符串 方法一: string myConn = System.Configuration.ConfigurationManager.ConnectionStrings["sqlConnectionString"].ConnectionString; 方法二: string connString = System.Web.Configuration.WebConfigurationManager.ConnectionStrings[&q

Entity Framework 中出现 Extent1.Discriminator 列不存在

问题描述 所有的表继承基类Entity[Serializable]publicabstractclassEntity{privatestring_id;[System.ComponentModel.DataAnnotations.Key]publicstringid{get{return_id;}set{_id=value;}}}[Serializable]publicpartialclassUser:Entity{privatestirng_name;publicstringname{set{

请帮忙看下 Entity Framework 中 Navigation property 的问题

问题描述 有一个Person类和Student类,二者是继承关系.另外,Student和StudyCost是一对一关系.代码如下:[Table("Person")]publicclassPerson{[Key]publicintPersonId{get;set;}publicintAge{get;set;}publicstringName{get;set;}publicvirtualstringInfo{get;set;}publicstringDescription{get{retu