• 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.
    
            }
        }
  • 相关阅读:
    python学习之函数基础
    Java并发编程之支持并发的list集合你知道吗
    Java并发编程之CAS第三篇-CAS的缺点及解决办法
    Java并发编程之CAS二源码追根溯源
    Java并发编程之CAS第一篇-什么是CAS
    Java并发编程之验证volatile指令重排-理论篇
    【免费百度网盘不限速】爱奇艺万能联播 百度网盘不限速的方法
    Java并发编程之验证volatile不能保证原子性
    Java并发编程之验证volatile的可见性
    Java并发编程学习前期知识下篇
  • 原文地址:https://www.cnblogs.com/bkyrslf/p/12667383.html
Copyright © 2020-2023  润新知