首页 > 代码库 > .Net利用泛型封装EF CodeFirst 数据库初始值设定项
.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); } }
.Net利用泛型封装EF CodeFirst 数据库初始值设定项
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。