2015-01-08 89 views
0

我想創建一個動態註冊DBsets的代碼塊。 我決定使用一個空接口來捕獲實現接口的類。DBSet使用接口動態註冊

這是我的代碼塊。

var entityMethod = typeof(DbModelBuilder).GetMethod("Entity"); 

      foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
      { 
       var entityTypes = assembly 
        .GetTypes() 
        .Where(t => 
         t.GetInterfaces().Contains(typeof(IBaseEnt))).toList();    

       foreach (var type in entityTypes) 
       { 
        entityMethod.MakeGenericMethod(type) 
         .Invoke(modelBuilder, null); 
       } 
      } 

但我的種子方法無法處理我的dbset。請幫幫我。

我也試過這個代碼塊。

var entityTypes = from t in Assembly.GetExecutingAssembly().GetTypes() 
            where t.GetInterfaces().Contains(typeof(IBaseEnt)) 
              && t.GetConstructor(Type.EmptyTypes) != null 
            select t; 

回答

0

這是解決方案。它正在使用EF 6.1。

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      var entityMethod = typeof(DbModelBuilder).GetMethod("Entity"); 
      foreach (var assembly in AppDomain.CurrentDomain.GetAssemblies()) 
      { 
       var entityTypes = from t in Assembly.GetExecutingAssembly().GetTypes() 
            where t.GetInterfaces().Contains(typeof(IBaseEnt)) 
              && t.GetConstructor(Type.EmptyTypes) != null 
            select t; 

       foreach (var type in entityTypes) 
       { 
        entityMethod.MakeGenericMethod(type) 
         .Invoke(modelBuilder, null); 
       } 
      } 
      base.OnModelCreating(modelBuilder); 
     }