.Net利用泛型封装EF CodeFirst 数据库初始值设定项

  在使用 EF的code fist 方法我们可能会用到这三个类型对象DropCreateDatabaseAlways(总是删除创建对象) DropCreateDatabaseIfModelChanges(如果对象盖面删除创建对象) CreateDatabaseIfNotExists(如果对象不存在删除创建对象)

  今天就利用泛型和工厂模式,将这三个对象封装以下,首先对三个对象类型分别创建子类,便于后期扩展。

    public class MyDropCreateDatabaseAlways<T> : DropCreateDatabaseAlways<T> where T : DbContext
    {

    }

    public class MyDropCreateDatabaseIfModelChanges<T> : DropCreateDatabaseIfModelChanges<T> where T : DbContext
    {

    }

    public class MyCreateDatabaseIfNotExists<T> : CreateDatabaseIfNotExists<T> where T : DbContext
    {

    }

对象扩展子类

在创建一个枚举类型方便调用

    public enum CreateDatabaseWayType
    {
        DropCreateDatabaseAlways = 1,
        DropCreateDatabaseIfModelChanges = 2,
        CreateDatabaseIfNotExists = 3,
    }

枚举类型

最后是一个工厂模式 

public static class CreateDatabaseFactory
    {
        public static IDatabaseInitializer<T> ChooseCreateDatabaseWay<T>(CreateDatabaseWayType createDatabaseWayType) where T : DbContext
        {
            switch (createDatabaseWayType)
            {
                case CreateDatabaseWayType.DropCreateDatabaseAlways:
                    return new MyDropCreateDatabaseAlways<T>();
                case CreateDatabaseWayType.DropCreateDatabaseIfModelChanges:
                    return new MyDropCreateDatabaseIfModelChanges<T>();
                case CreateDatabaseWayType.CreateDatabaseIfNotExists:
                default:
                    return new MyCreateDatabaseIfNotExists<T>();
            }
        }
    }

工厂模式

调用示例

在上下文的构造函数中

  public XHRTContext(bool init)
    : base("name=XHRT")
        {
            if (init)
            {
               SetInitializer(CreateDatabaseWay.ChooseCreateDatabasefactory<XHRTContext>(CreateDatabaseWayType.DropCreateDatabaseAlways));
                Database.Initialize(true);
            }
        }

调用示例

时间: 2024-10-13 20:22:05

.Net利用泛型封装EF CodeFirst 数据库初始值设定项的相关文章

使用EF访问数据库,出现“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常。

今天在使用的EF时候,发生了"System.Data.Entity.Internal.AppConfig"的类型初始值设定项引发异常.这样的一个错误 查了原因,原来是appconfig中,connectionStrings的位置放错了.因为configSections必须是appconfig的第一个节点 这样是不对的. 应该是 感觉这种情况应该不仅仅只限于这个EF,只要configSections不是第一个标签就会有问题,也适用于其他情况~~

&lt;转&gt;类型初始值设定项引发异常

类型初始值设定项引发异常 连续两天都为这个运行时错误“类型初始值设定项引发异常”而烦恼,调试也不知道哪里出 了问题.上网Google一下,一大堆相同的问题,可是按照那些方法折腾来折腾去,问题还是一样.最后在CSDN上发帖子问了,果然“重赏之下必有勇 夫”,很快就有高手回复了,问题也随着解决了.哈哈.在此写个随笔,以后如果大家遇到类似问题,也可参考一下,自己也做个备忘,不然放在电脑上,又找不 到,我的电脑文件到处乱放,有时连我自己都找不到^_^. 问题是这样嘀: 项目采用了三层架构和工厂模式,并借

【转】类型初始值设定项引发异常的解决办法

类型初始值设定项引发异常的解决办法 转自:小羊快跑1  http://www.cnblogs.com/SheepRunning/p/4452847.html 今天在调试代码的时候突然抛出了如下异常:"XORM.Database"的类型初始值设定项引发异常. 顿时感觉很突兀,平常的时候一点问题没有,为什么今天调试就出问题了呢?测试了一下,发现在数据处理层的一条实例化代码处出错: //获取类型的映射信息 MappingInfo mapInfo = xmlMapping.GetDataMap

类型初始值设定项引发异常的解决办法

今天在调试代码的时候突然抛出了如下异常:“XORM.Database”的类型初始值设定项引发异常. 顿时感觉很突兀,平常的时候一点问题没有,为什么今天调试就出问题了呢?测试了一下,发现在数据处理层的一条实例化代码处出错: //获取类型的映射信息 MappingInfo mapInfo = xmlMapping.GetDataMapInfo(type); Database db = new Database();//出错代码 db.CommandText = storageprocedure; /

重装.NET Framework 解决异常:“&lt;Module&gt;”的类型初始值设定项引发异常。

最近在使用数据库(我的是Sql Server 2012)时,连接时突然报错:"<Module>"的类型初始值设定项引发异常. 不知道是什么原因,因为之前重装TV时,要删除注册表和在控制面板卸载,不知道是不是有误操作删除其他的软件,导致了这一个问题. 在百度查询,很多类似问题,但是没有具体解决办法,模糊的有两个方向: 1.某个服务没有开启 之所以说是"某个",是因为CSDN的博主最后解决只说了一句"有个服务没有开启,开启就正常了",具体

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常。

“Oracle.DataAccess.Client.OracleConnection”的类型初始值设定项引发异常. 被这个问题困扰了好长时间,终于找到了原因: 原来是本机安装的Oracle客户端版本与服务器不一致. 解决办法: 将以下的dll文件引用即可,dll分为两个版本,Windows7 32位系统亲测,不管安不安装Oracle客户端,都可以使用. 版本一:http://download.csdn.net/detail/zhzhx0318/9120651 版本二:http://downloa

System.Data.Entity.Internal.AppConfig 类型初始值设定项引发异常

在一开始时将connectionStrings 写在了configSections之上如下图一示,结果抛出:“System.Data.Entity.Internal.AppConfig”的类型初始值设定项引发异常. 图一:最初配置 图二:抛出异常 解决方法,是将connectionStrings 写在了configSections之下,如图三 图三:调整后的配置

“system.servicemodel.diagnostics.traceutility” 类型初始值设定项引发异常

在调试WCF服务时遇到“system.servicemodel.diagnostics.traceutility” 类型初始值设定项引发异常错误,仔细检查后发现是配置文件问题. ... <startup> <supportedRuntime version = "v4.0" sku =".NETFramework, Version = v4.0"/> </startup> ... 可能是因为引用服务导致NET版本不兼容.去掉这一句

c# 类型初始值设定项引发异常

今天使用VS2010编译c#程序,编译顺利通过,点击运行启动程序,弹框提示如题错误.断点调试,程序甚至都没有进入main函数!!查阅网上资料,几种分析如下(1)反射机制 (2)app.config文件格式不对  (3)程序集引用.经过判断,以上都不符合,最后发现是该64位启动工程的目标平台配的是x86,改为64位后启动成功.由于这个项目不是我自己创建的,所以本能的没有检查属性配置,在此记录,以供日后查阅,也便于帮助后来的人. c# 类型初始值设定项引发异常,布布扣,bubuko.com