OSharp DbContent初始化分析
DBContent初始化 —— 关联Entity查找
一、 关联到具体的Entity
二、 通过EntityTypeConfiguration 关联到DbContent
三、 在初始化DbContent时,映射相应的Entity对象
四、 通过缓存DbContentType集合字典,查找DbContextInitializerBase
五、 查找当前DbContent的Entity
六、 具体DbContent创建(自定义DbContent的实现)
需实现DbContextInitializerBase基类
筛选出当前DbContent的Entity
初始化配置
DBContent初始化 —— DBContent生成
一、 主要方法
二、 框架初始化入口
三、 DatabaseInitializer数据库初始化——配置信息
四、 DatabaseInitializer数据库初始化——生成
附一段单元测试代码
public class DbContentInitializeTest
{
[Fact()]
public void DbContentInitialize_Test()
{
using (var context = new MyDbContext())
{
context.AddEntityRegHelper(new CustomerRegstHelper());
context.AddEntityRegHelper(new CusRegstHelper());
IDatabaseInitializer<MyDbContext> initializer;
if (!context.Database.Exists())
{
initializer = new CreateDatabaseIfNotExists<MyDbContext>(); ;
}
else
{
initializer = new MigrateDatabaseToLatestVersion<MyDbContext, AutoMigrationsConfiguration<MyDbContext>>(); ;
}
Database.SetInitializer(initializer); ObjectContext objectContext = ((IObjectContextAdapter)context).ObjectContext;
StorageMappingItemCollection mappingItemCollection = (StorageMappingItemCollection)objectContext.ObjectStateManager
.MetadataWorkspace.GetItemCollection(DataSpace.CSSpace);
mappingItemCollection.GenerateViews(new List<EdmSchemaError>());
}
}
} /// <summary>
/// 自动迁移配置
/// </summary>
/// <typeparam name="TContext"></typeparam>
public class AutoMigrationsConfiguration<TContext> : DbMigrationsConfiguration<TContext>
where TContext : DbContext
{
/// <summary>
/// 初始化一个<see cref="AutoMigrationsConfiguration{TContext}"/>类型的新实例
/// </summary>
public AutoMigrationsConfiguration()
{
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = true;
ContextKey = typeof(TContext).FullName;
}
} /// <summary>
/// 实体注册Helper接口
/// </summary>
public interface IEntityRegstHelper
{
void RegTo(ConfigurationRegistrar confRegistrar);
} // 客户
public class Customer
{
public int CustomerID { get; set; }
public String CustomerName { get; set; }
public string Address { get; set; }
}
// 客户实体的注册Helper
public class CustomerRegstHelper : IEntityRegstHelper
{
public void RegTo(ConfigurationRegistrar confRegistrar)
{
confRegistrar.Add<Customer>(new EntityTypeConfiguration<Customer>());
}
} public class Cus
{
public int CusID { get; set; }
public String CusName { get; set; }
public string Add { get; set; }
}
// 客户实体的注册Helper
public class CusRegstHelper : IEntityRegstHelper
{
public void RegTo(ConfigurationRegistrar confRegistrar)
{
confRegistrar.Add<Cus>(new EntityTypeConfiguration<Cus>());
}
} public class MyDbContext : DbContext
{
public MyDbContext()
: this(false)
{ } public MyDbContext(bool proxyCreationEnabled)
: base("name=RongziCmsDbContext")
{
//The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
//for the 'System.Data.SqlClient' ADO.NET provider could not be loaded.
//Make sure the provider assembly is available to the running application.
//See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
var _ = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
this.Configuration.ProxyCreationEnabled = proxyCreationEnabled;
} List<IEntityRegstHelper> entityRegstHelperlist;
// 添加实体注册
public void AddEntityRegHelper(IEntityRegstHelper r)
{
if (entityRegstHelperlist == null)
entityRegstHelperlist = new List<IEntityRegstHelper>();
entityRegstHelperlist.Add(r);
} //public DbSet<Customer> Customers { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// 动态地加入实体
if (entityRegstHelperlist != null)
{
foreach (IEntityRegstHelper r in entityRegstHelperlist)
r.RegTo(modelBuilder.Configurations);
}
}
}
OSharp DbContent初始化分析的更多相关文章
- JVM学习四:JVM之类加载器之初始化分析
在经过了前面的加载 和 连接分析之后,这一节我们进入重要的初始化分析过程: 一.认识初始化 初始化:这个似乎与上面的初始化为默认值有点矛盾,我们再看一遍:为累的静态变量赋予正确的初始值,上面是赋予默 ...
- sparkContext之一:sparkContext的初始化分析
Spark源码学习:sparkContext的初始化分析 spark可以运行在本地模式local下,可以运行在yarn和standalone模式下,但是本地程序是通过什么渠道和这些集群交互的呢?那就是 ...
- Ztack学习笔记(2)-系统初始化分析
main函数先执行初始化工作,包括硬件.网络层.任务等的初始化. 一 系统初始化 系统初始化函数主要完成内存分配.消息队列头.定时器.电源管理.任务系统及内存栈等的初始化,具体如下代码所示: //os ...
- cc2530操作任务系统初始化分析
操作系统任务初始化void osalInitTasks( void ){ uint8 taskID = 0; // 分配内存,返回指向缓冲区的指针 tasksEvents = (uint16 *)os ...
- Android 5.0 Phone初始化分析
已经更新至个人blog:http://dxjia.cn/2015/07/android-5-0-phone-init-analysis/ persistent属性 要想了解phone的框架,首先需要了 ...
- socket相关的开机初始化分析
针对内核3.9 系统开启时,会使用init/main.c,然后再里面调用kernel_init(),在里面会再调用do_basic_setup(),调用do_initcalls(),调用do_one_ ...
- STM32_3 时钟初始化分析
在startup文件中,调用了2个函数,一个是System_Init, 另一个是main. System_Init()在system_stm32f10x.c 这个文件中,先看一下时钟树,再分析一下这个 ...
- Android编译系统环境过程初始化分析【转】
本文转载自:http://blog.csdn.net/luoshengyang/article/details/18928789 Android源代码在编译之前,要先对编译环境进行初始化,其中最主要就 ...
- 列表初始化 分析initializer_list<T>的实现
列表初始化(1)_统一初始化 1. 统一初始化(Uniform Initialization) (1)在C++11之前,很多程序员特别是初学者对如何初始化一个变量或对象的问题很容易出现困惑.因为可以用 ...
随机推荐
- 使用 ChromaKey 滤镜进行抠图
简介 Nokia Imaging SDK 1.0 中新提供的 ChromaKey 滤镜是一个神奇的滤镜,它的基本原理就是把 一个指定范围值内的颜色变为透明或半透明,比如下面的 demo 演示的,看上 ...
- jQuery瀑布流插件 Masonry
http://www.jq22.com/yanshi362 参考案例 http://image.quanjing.com/lvyou/
- 访问子节点childNodes
访问子节点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点 ...
- CentOS 6.5 安装 php7 教程 包很重要使用lnmp1.4里面的包
./configure \ --prefix=/usr/local/php-7.0.1 \ --with-mysql=mysqlnd \ --with-pdo-mysql=mysqlnd \ --wi ...
- 本机添加多个git仓库账号
我们可能会需要在一台电脑上以不同的github账户去使用git,这时就需要去解决如何管理本机上的多个ssh key的问题了. 生成新ssh key 如果我们电脑上已经存在了一个ssh key,那么我们 ...
- Soursight Insight 使用小结
1.Soursight Insight中添加自需要的文件过滤器: options->document options ->add type document type name:scatt ...
- yum 安装 influxdb/telegraf
环境:centos 7 参考官网教程:http://docs.influxdata.com/telegraf/v1.9/introduction/installation/ 添加 yum 源: vim ...
- Spring Boot简化了基于Spring的应用开发
Spring Boot简化了基于Spring的应用开发,通过少量的代码就能创建一个独立的.产品级别的Spring应用. Spring Boot为Spring平台及第三方库提供开箱即用的设置,这样你就可 ...
- linux下解压 tar.bz2
tar xvfj xxx.tar.bz2 转自: http://www.360doc.com/content/12/0907/16/8006573_234845810.shtml
- 用 HTML5+ payment方法支付宝支付遇到的坑
用 HTML5+ payment方法碰到的第一个坑就是如果是支付宝的话签约那种支付方式. 因为 Dcloud的文档没有更新的原因你可以看到他们说的都是‘移动支付’,但是你去支付宝平台的时候看到的根本就 ...