public static string GetTableName <T>(this FawDataContext context) where T : class { var objectContext = ((IObjectContextAdapter)context).ObjectContext; var sql = objectContext.CreateObjectSet <T>().ToTraceString(); var tableNamePattern = new Regex(@"FROM \[dbo\]\.\[(?<table>.*)\] AS"); var match = tableNamePattern.Match(sql); return(match.Groups["table"].Value); }
public static T InsertOrUpdate <T>(this FawDataContext context, T entity, object key) where T : class, new() { var dbSet = context.Set <T>(); var dbEntity = dbSet.Find(key); if (dbEntity == null) { dbEntity = dbSet.Create(); dbSet.Add(dbEntity); } context.Entry(dbEntity).CurrentValues.SetValues(entity); return(dbEntity); }
public static T GetDetachedCopy <T>(this FawDataContext context, T entity) where T : class { var proxyCreationEnabled = context.Configuration.ProxyCreationEnabled; try { context.Configuration.ProxyCreationEnabled = false; var poco = context.Entry(entity).CurrentValues.ToObject() as T; return(poco); } finally { context.Configuration.ProxyCreationEnabled = proxyCreationEnabled; } }
public static IEnumerable <TOutput> ExecuteSqlQuery <TInput, TOutput>(this FawDataContext context, Func <TInput, TOutput> mapperFunc, Expression <Func <TOutput, Guid> > keyExpression, string sqlQuery, params object[] parameters) where TOutput : class { if (mapperFunc == null) { throw new ArgumentNullException(nameof(mapperFunc)); } if (sqlQuery == null) { throw new ArgumentNullException(nameof(sqlQuery)); } var queryResutls = context.Database.SqlQuery <TInput>(sqlQuery, parameters).ToList(); return(queryResutls.Select(r => keyExpression == null ? mapperFunc(r) : context.GetOrAttach(mapperFunc(r), keyExpression)).ToList()); }
public static T Clone <T>(this FawDataContext context, T entity, bool?makeProxy = null) where T : class { var proxyCreationEnabled = context.Configuration.ProxyCreationEnabled; try { context.Configuration.ProxyCreationEnabled = makeProxy ?? IsProxy(entity); var clone = context.Set <T>().Create(); var entry = context.Entry(clone); entry.State = EntityState.Added; entry.CurrentValues.SetValues(entity); entry.State = EntityState.Detached; return(clone); } finally { context.Configuration.ProxyCreationEnabled = proxyCreationEnabled; } }
internal static IEnumerable <TResult> ExecuteQueryNullSafe <TResult>(this FawDataContext context, string command, params object[] parameters) { var list = new List <object>(); var listVals = new List <bool>(); for (var x = 0; x < parameters.Count(); x++) { if (parameters[x] == null || parameters[x] is DBNull) { command = command.Replace("{" + x + "}", "NULL"); listVals.Add(false); } else { list.Add(parameters[x]); listVals.Add(true); } } var nextId = 0; for (var i = 0; i < listVals.Count; i++) { var isUsed = listVals[i]; if (!isUsed) { continue; } if (nextId != i) { command = command.Replace("{" + i + "}", "{" + nextId + "}"); } nextId++; } return(context.Database.SqlQuery <TResult>(command, list.ToArray())); }
public static T InsertOrUpdate <T>(this FawDataContext context, T entity) where T : BaseEntity, new() { return(context.InsertOrUpdate(entity, entity.EntityId)); }