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.
}
}