• ADO.NET Entity Framework支持多Provider


    前言

    EF跟其它ORM的做法不一样,其它ORM是先有Model再自动维护数据库,EF是先有数据库再自动(目前只能手工重建来达到“刷新”的目的)维护Model的。相比其它ORM,EF最要命的是目前不“内置”切换Provider的支持。但微软的开发人员给我们提供了以下思路:

    参考代码:http://code.msdn.microsoft.com/EFQuerySamples

    参考文章:http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=3796966&SiteID=1


    具体步骤:

    0.前提:各个类型的数据库结构完全一致

    1.正常添加ADO.NET Entity Data Model(edmx文件),如FooMSSQL,查看Model属性,元数据项目处理,默认“嵌入输出程序集中”,改为“复制到输出目录”,这样就在输出目录产生了3个文件:FooMSSQL.csdl、FooMSSQL.msl和FooMSSQL.ssdl;

    2.如此类推,创建各个类型的数据库模型,如FooOracle、FooSQLite等;

    3.对于各个不同类型的数据库,csdl、msl这2种文件的内容是一致的,差异就在于ssdl文件(特定数据库结构描述);

    4.把Foo.Designer.cs代码改名为Entities.cs(名称可随便改)并复制到任意目录,如Schemas,同样复制csdl、msl(只需要一个数据库的),最终该目录应该有这些文件:
     a.Entities.cs
     b.Foo.csdl
     c.Foo.msl
     d.FooMSSQL.ssdl
     e.FooOracle.ssdl
     
    5.修改ssdl文件中的Provider和ProviderManifestToken属性为实际的值;
     
    6.从项目中排除之前添加的数据库模型文件(*.edmx);

    7.把Entities.cs包括进来,并选择Foo.csdl、Foo.msl、FooMSSQL.ssdl、FooOracle.ssdl的属性为复制到输出目录;

    8.在App.config/Web.Config添加各个数据库的Provider支持:在connectionStrings字段,你会发现之前添加的模型相应的ConnectionString已经存在,我们不应该修改它们,因为如果以后我们修改了数据库结构,我们需要重新包含这些edmx文件进来并进行修改;
     你应该复制这些ConnectionString,改名,并且更改csdl、msl、ssdl的路径,因为之前IDE生成的是输出到bin目录,而我们实际用的是Schemas目录,如在ASP.NET下:
     metadata=~/bin/Oracle.csdl|~/bin/Oracle.ssdl|~/bin/Oracle.msl
     改为:
     metadata=~/bin/Schemas/Foo.csdl|~/bin/Schemas/FooOracle.ssdl|~/bin/Schemas/Foo.msl
     注意csdl和msl文件名已经改变!

    9.最终使用:
        public static string ConnectionString = ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings["ConnectionString"]].ConnectionString;

        public static Entities GetContext
        {
            get
            {
                Entities ent = new Entities(ConnectionString);
                ent.Connection.Open();
                return ent;
            }
        }

     注意:ConnectionString为刚才在App.config/Web.Config中新增的,推荐在AppSettings中记录当前使用的Provider的名称,然后就可以随时切换


    P.S. EF for Oracle
    网站:http://code.msdn.microsoft.com/EFOracleProvider
    下载运行,Provider自动添加到GAC

  • 相关阅读:
    Min_25 筛 学习笔记
    UOJ#172. 【WC2016】论战捆竹竿 字符串 KMP 动态规划 单调队列 背包
    Codeforces 715B. Complete The Graph 最短路,Dijkstra,构造
    UOJ#407. 【IOI2018】狼人 Kruskal,kruskal重构树,主席树
    UOJ#218. 【UNR #1】火车管理 线段树 主席树
    Codeforces 1045E. Ancient civilizations 构造 计算几何 凸包
    Codeforces 947F. Public Service 构造
    Pop Star 1.2.5
    TopCoder SRM704 Div1 800 构造
    Codeforces 1109E. Sasha and a Very Easy Test 线段树
  • 原文地址:https://www.cnblogs.com/unruledboy/p/ADONETEFProviders.html
Copyright © 2020-2023  润新知