0

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;
4

1 に答える 1

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);
        }
于 2015-01-08T09:28:05.160 に答える