zoukankan      html  css  js  c++  java
  • EF 支持泛型动态加载类访问数据库

      public class Mode1 : IDataItem
        {
            public string  Name
            {
                get;
                set;
            }
            public int  Id
            {
                get; set;
            }
        }
        public class Mode2 : IDataItem
        {
    
           
            public int Age
            {
                get;
                set;
            }
            public int Id
            {
                get; set;
            }
        }
    
        public class  MyContext:DbContext
        {
    
            public MyContext():base("name=mydb")
            {
                //System.Data.Entity.Database.SetInitializer(new Models.CreateData());
            }
            //public DbSet<Mode1> Mode1s { get; set; }
    
            protected override void OnModelCreating(DbModelBuilder modelBuilder)
            {
    
                Type[] ts = new Type[] { typeof(Mode1), typeof(Mode2) };
                foreach (var item in ts)
                {
                    Type mappingType = typeof(StdMapping<>).MakeGenericType(item);
                    object obj = Activator.CreateInstance(mappingType);
                   Type cfgType = modelBuilder.Configurations.GetType();
                   // var method = cfgType.GetMethod("Add",  new Type[] { typeof(EntityTypeConfiguration<>) }); AddFromAssembly
                   var methods= cfgType.GetMethods(BindingFlags.Instance | BindingFlags.Public);
                   var method = methods.First(t => t.Name == "Add" && t.GetGenericArguments()[0].Name == "TEntityType");
                   method.MakeGenericMethod(item).Invoke(modelBuilder.Configurations, new object[] { obj });
                }
    
                var sqliteConnectionInitializer = new SqliteCreateDatabaseIfNotExists<MyContext>(modelBuilder);
                Database.SetInitializer(sqliteConnectionInitializer);
            }
        }
    
        internal partial class StdMapping<T> : EntityTypeConfiguration<T> where T : class, IDataItem
        {
            public StdMapping()
            {
                this.HasKey(t => t.Id);
                //this.ToTable("tbCases");
            }
        }
    
        public class Myclass
        {
            public void Add<T>(List<T> cols)
            {
    
            }
    
            public void Add<T>(System.Collections.ObjectModel.Collection<T> cols)
            {
    
            }
        }
    
       
    
        public interface IDataItem
        {
            int Id { get; set; }
        }
    
    
        class Program
        {
            static void Main(string[] args)
            {
                int a = 5;
                int b = 2;
                int c = 3;
                int d = 4;
    
    
                using (var context = new MyContext())
                {
                   // context.Database.CreateIfNotExists();
                    context.Set<Mode2>().Add( new Mode2() { Id=2, Age=24});
                    context.SaveChanges();
                    Console.WriteLine();
                }
               
    
    
                Console.WriteLine("sss");
                    Console.ReadKey();
              //  Assembly.
    
            }
        }
  • 相关阅读:
    Fiddler配置代理hosts的方法
    Android利用Fiddler进行网络数据抓包
    Android键盘面板冲突 布局闪动处理方案
    View的三次measure,两次layout和一次draw
    jquery.fly.min.js 拋物插件
    js刷新页面方法大全
    Console命令详解,让调试js代码变得更简单
    div中的内容垂直居中的五种方法
    Struts2之i18N国际化
    maven阿里云中央仓库
  • 原文地址:https://www.cnblogs.com/bkyrslf/p/12667383.html
Copyright © 2011-2022 走看看