private static string GetTableName(System.Data.Linq.DataContext DB, Type entityType) { Type tableType = typeof(System.Data.Linq.Table <>).MakeGenericType(entityType); var propertyInfo = DB.GetType().GetProperties().Where(p => p.PropertyType.IsGenericType && p.PropertyType == tableType).FirstOrDefault(); if (propertyInfo == null) { return(string.Empty); } return(propertyInfo.Name); }
internal static bool DeleteWithCascase <T>(System.Data.Linq.DataContext ctx, T entity) where T : class, INotifyPropertyChanged { //Get the primary key of the context var pkey = GetPrimaryKey <T>(); //Get foreign keys var fkeys = GetForeignKeys <T>(); //get the model for the ctx var model = new AttributeMappingSource().GetModel(ctx.GetType()); //Get the table for the given entity var eTable = ctx.GetTable <T>(); foreach (var modelTable in model.GetTables()) { //Loop tables and delete } return(true); }
internal static void MakeDirty(this System.Data.Linq.DataContext dc, object someEntity) { //get dc type Type dcType = dc.GetType(); while (dcType != typeof(System.Data.Linq.DataContext)) { dcType = dcType.BaseType; } //get hold of the CommonDataServices thing in the DC System.Reflection.FieldInfo commonDataServicesField = dcType.GetField("services", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); object commonDataServices = commonDataServicesField.GetValue(dc); Type commonDataServicesType = commonDataServices.GetType(); //get hold of the change tracker System.Reflection.PropertyInfo changeTrackerProperty = commonDataServicesType.GetProperty("ChangeTracker", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); object changeTracker = changeTrackerProperty.GetValue(commonDataServices, null); Type changeTrackerType = changeTracker.GetType(); //get the tracked object method System.Reflection.MethodInfo getTrackedObjectMethod = changeTrackerType.GetMethod("GetTrackedObject", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); object trackedObject = getTrackedObjectMethod.Invoke(changeTracker, new object[] { someEntity }); //get the ConvertToModified method Type trackedObjectType = trackedObject.GetType(); System.Reflection.MethodInfo convertToModifiedMethod = trackedObjectType.GetMethod("ConvertToModified", System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic); //call the convert to modified method convertToModifiedMethod.Invoke(trackedObject, null); }