예제 #1
0
        static FeatureMerger()
        {
            Type adoMergerType = Type.GetType("System.Data.Merger, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089");
            _adoMergerTypeHandle = adoMergerType.TypeHandle;

            _createMerger = generateCreateMergerDelegate();
            _mergeSchema = generateMergeSchemaDelegate();
            _getKeyIndex = generateGetKeyIndexDelegate();
        }
예제 #2
0
        private static CreateMergerDelegate generateCreateMergerDelegate()
        {
#if !CFBuild
            Type[] ctorParams = new Type[] { typeof(DataTable), typeof(bool), typeof(MissingSchemaAction) };

            DynamicMethod createMergerMethod = new DynamicMethod("Merger_Create",
                                                                 MethodAttributes.Public | MethodAttributes.Static,
                                                                 CallingConventions.Standard,
                                                                 typeof(Object),
                                                                 ctorParams,
                                                                 Type.GetTypeFromHandle(_adoMergerTypeHandle),
                                                                 false);

            Type adoMergerType = Type.GetTypeFromHandle(_adoMergerTypeHandle);
            ILGenerator il = createMergerMethod.GetILGenerator();
            il.Emit(OpCodes.Ldarg_0);
            il.Emit(OpCodes.Ldarg_1);
            il.Emit(OpCodes.Ldarg_2);
            ConstructorInfo ctor = adoMergerType
                .GetConstructor(BindingFlags.NonPublic | BindingFlags.Instance, null, ctorParams, null);
            il.Emit(OpCodes.Newobj, ctor);
            il.Emit(OpCodes.Isinst, typeof(Object));
            il.Emit(OpCodes.Ret);

            CreateMergerDelegate d = (CreateMergerDelegate)createMergerMethod.CreateDelegate(typeof(CreateMergerDelegate));
            return d;
#else
            CreateMergerDelegate d = new CreateMergerDelegate(CreateMergerInvoker);
            return d;
#endif
        }
예제 #3
0
 static FeatureMerger()
 {
     _createMerger = generateCreateMergerDelegate();
     _mergeSchema = generateMergeSchemaDelegate();
     _getKeyIndex = generateGetKeyIndexDelegate();
     _getDataKeyColumnReference = generateGetDataKeyColumnReferenceDelegate();
     _createDataKey = generateCreateDataKeyDelegate();
     _createEmptyDataKey = generateCreateEmptyDataKeyDelegate();
     _getDataKeyFromUniqueConstraint = generateGetDataKeyFromUniqueConstraintDelegate();
     _dataKeyGetSortIndex = generateDataKeyGetSortIndexDelegate();
     _getDataKeyHasValue = generateGetDataKeyHasValueDelegate();
     _cloneDataColumn = generateCloneDataColumnDelegate();
 }