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();
             }
         }
     }
 }
时间: 2024-08-03 21:34:18

CodeFirst中DbContext动态添加DbSet的相关文章

Hadoop学习笔记—13.分布式集群中的动态添加与下架

开篇:在本笔记系列的第一篇中,我们介绍了如何搭建伪分布与分布模式的Hadoop集群.现在,我们来了解一下在一个Hadoop分布式集群中,如何动态(不关机且正在运行的情况下)地添加一个Hadoop节点与下架一个Hadoop节点. 一.实验环境结构 本次试验,我们构建的集群是一个主节点,三个从节点的结构,其中三个从节点的性能配置各不相同,这里我们主要在虚拟机中的内存设置这三个从节点分别为:512MB.512MB与256MB.首先,我们暂时只设置两个从节点,另外一个作为动态添加节点的时候使用.主节点与

javascript的document中的动态添加标签

document的高级篇中提供了节点操作的函数,具体包括:获取节点,改变节点,删除节点,替换节点,创建节点,添加节点,克隆节点等函数.我们可以利用这些函数动态改变html的节点. 1.JavaScript      ___| ———————————————————————————————————————————————————————— <script type="text/javascript"> function test1(){//对个节点的ID相同时候的情况 var

viewpager中彻底性动态添加、删除Fragment

为了解决彻底删除fragment,我们要做的是:1.将FragmentPagerAdapter 替换成FragmentStatePagerAdapter,因为前者只要加载过,fragment中的视图就一直在内存中,在这个过程中无论你怎么刷新,清除都是无用的,直至程序退出: 后者 可以满足我们的需求.2.我们可以重写Adapter的方法--getItemPosition(),让其返回PagerAdapter.POSITION_NONE即可: @Override public int getItem

js中关于动态添加事件,不能使用循环变量的问题

在编写事件的时候,我们难免会遇到以下这种情况:<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body> <ul> <li>内容一</li> <li>内容二</li> <li&g

vue中如何动态添加readonly属性

动态绑定input的readonly属性 1 <inpu :readonly="status ? false : 'readonly'"> status 为 false时添加 readonly 属性,只读,false不要加引号! 原文地址:https://www.cnblogs.com/gopark/p/11172967.html

hive中,动态添加map和reduce的大小,以增加并行度

map是配置mapred.max.split.size,来定义map处理文件的大小,默认是256000000字段,换算就是256M.  如果想增加map的并行度,那么就是减少map处理文件的大小即可. 即set mapred.max.split.size=xxx(更小的字节) reduce和map是一致的,修改hive.exec.reducers.bytes.per.reducer这个参数

python解析网页中js动态添加的内容

https://www.cnblogs.com/asmblog/archive/2013/05/07/3063809.html https://www.zhihu.com/question/21471960 http://blog.csdn.net/hanchaobiao/article/details/73150405 https://www.cnblogs.com/hqutcy/p/7248506.html https://www.cnblogs.com/greenteemo/p/67454

Python 爬取网页中JavaScript动态添加的内容(二)

使用 selenium + phantomjs 实现 1.准备环境 selenium(一个用于web应用程测试的工具)安装:pip install seleniumphantomjs(是一种无界面的浏览器,用于完成网页的渲染)下载:http://phantomjs.org/download.html 2.使用 from selenium import webdriver url = 'http://jandan.net/ooxx' driver = webdriver.PhantomJS( ex

Android使用addView动态添加组件

在项目开发中,我们经常需要进行动态添加组件,其中可添加的部分有两项:布局和组件 其中,添加的布局主要有RelativeLayout型(相对布局)的和LinearLayout(线性布局) 添加的组件主要有文本显示框,编辑框,按钮等组件. 下面,就让我们来进行实现: 首先我们创建一个新的项目,删除MainActivity.class中没有的代码,仅留下protected void onCreate(Bundle savedInstanceState)函数 往布局文件中添加一个新的组件: 1. add