CodeFirst中DbContext动态添加DbSet
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity.ModelConfiguration;
using System.Data.Entity.ModelConfiguration.Configuration; namespace CodeFirstDemo
{
/// <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 MyDbContext : DbContext
{
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);
}
}
} class Program
{
static void Main(string[] args)
{
using (var db = new MyDbContext())
{
db.AddEntityRegHelper(new CustomerRegstHelper()); var c = new Customer()
{
CustomerName = "长沙市大风通讯有限公司",
Address = "长沙市"
};
db.Set<Customer>().Add(c);
db.SaveChanges(); var query = from customer in db.Set<Customer>()
select customer;
foreach (var cq in query)
{
Console.WriteLine("客户: {0}, 地址:{1}", cq.CustomerName, cq.Address);
} Console.WriteLine("按任意键退出");
Console.ReadKey();
}
}
}
}
CodeFirst中DbContext动态添加DbSet的更多相关文章
- Asp.net MVC3 中,动态添加filter
Asp.net MVC3 中,动态添加filter filter是attribute,不支持泛型,传入的参数必须是固定的值.总之很受attribute本身的限制. 发现一篇老外的文章,动态设置filt ...
- 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”
通过源码了解ASP.NET MVC 几种Filter的执行过程 一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...
- javascript的document中的动态添加标签
document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScri ...
- 浅谈js中如何动态添加表头/表列/表格内容
我想很多童鞋用js动态向表格中添加数据很熟悉,而且也觉得非常简单!是的,对于写页面的童鞋来说,最喜欢写查询的页面了,动态向表格绑定数据.用for循环就可以轻松搞定. 如果我们的业务需求有所变化,可能我 ...
- Android中如何动态添加碎片
Android中的开发需要兼容手机和平板,两个方面.这就引入了碎片的概念.(注意:这里用的Fragment强烈建议使用support-v4库中的Fragment) 碎片:是一种可以嵌入在活动当中的UI ...
- 在Winform中菜单动态添加“最近使用文件”
最近在做文件处理系统中,要把最近打开文件显示出来,方便用户使用.网上资料有说,去遍历“C:\Documents and Settings\Administrator\Recent”下的最近文档本.文主 ...
- Sencha Touch 2中如何动态添加button
原理很简单无非就是在一个容器上面选中id,用容器的add方法将button循环加入. 现在我们来试一下 1.先定义一个Container组件用,以后在里面添加button ? 1 2 xtype:'c ...
- viewpager中彻底性动态添加、删除Fragment
为了解决彻底删除fragment,我们要做的是:1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就 ...
- 记一次LayUI中Table动态添加列数据
这次在开发中遇到,有列数不固定的情况.废话不多说,先上图,在上代码. 下面上JS代码 function SearchData() { var dYear = $("#DYear") ...
随机推荐
- Visual studio之C#实现数字输入模拟键盘
背景 当前做的一个上位机需运行在工控机上,众所周知,工控机不可能配备键盘,只能是触屏,而我当前的上位机需要输入参数,于是之前的解决办法既是调用Windows自带的OSK.exe虚拟键盘,方法在我的另一 ...
- struts 防止重复提交表单
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC &qu ...
- JAVA小项目实例源码—学习娱乐小助手
代码地址如下:http://www.demodashi.com/demo/11456.html 一.程序实现 项目目录: MyJFrame:实现项目界面样式: AppProcess:实现调用api或爬 ...
- poj2983--Is the Information Reliable?(差分约束)
Is the Information Reliable? Time Limit: 3000MS Memory Limit: 131072K Total Submissions: 11125 A ...
- MongoDB Database Profiler
数据库profiler细粒度收集mongodb的写操作.游标.数据库命令等.可以在数据库级别或者实例级别开启profiling. profiler将收集到的数据写入system.profile集合中. ...
- STL 容器(vector 和 list )
1.这个容器的知识点比较杂 迭代器的理解: 1.erase()函数的返回值,它的迭代器在循环遍历中的奇特之处: #define _CRT_SECURE_NO_WARNINGS #include < ...
- 3.3v转5v开关电源芯片LM2731
方案一 输入3.3(可为2.7~14v):输出5v,700ma.已经过实际验证. 其中:C1,C2为贴片陶瓷电容,Cf也为贴片陶瓷电容,L1为6.8uH 电感 输出值只和R1,R2的值有关,但手册中又 ...
- Windows Azure Platform 性能监视器(转载)
Windows操作系统提供了查看性能监视器的功能,用于监视CPU使用率.内存使用率,硬盘读写速度,网络速度等.您可以在开始-->运行-->输入Perfmon,就可以打开性能监视器. 我们知 ...
- 저장소system.runtime.remoting.messaging.callcontext
https://msdn.microsoft.com/ko-kr/library/system.runtime.remoting.messaging.callcontext(v=vs.110).asp ...
- Java并发编程(五):Java线程安全性中的对象发布和逸出
发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...