예제 #1
0
        public static void DetachLocal <T>(this ZorkDbContext context, T t, int entryId)
            where T : BaseDataObject
        {
            var local = context.Set <T>()
                        .Local
                        .FirstOrDefault(entry => entry.Id.Equals(entryId));

            if (local != null)
            {
                context.Entry(local).State = EntityState.Detached;
            }
            context.Entry(t).State = EntityState.Modified;
        }
예제 #2
0
        /// <summary>
        ///     Async Method that retrieve first data object matching the given filter.
        /// </summary>
        /// <remarks>
        ///     Tracking on data returned is disabled by default.
        /// </remarks>
        /// <param name="filter">filter to apply</param>
        /// <param name="trackingEnabled">true if tracking is needed on data returned, false otherwise.</param>
        /// <returns>Returns <typeparamref name="TModel" />.</returns>
        public TModel GetSingle(Expression <Func <TModel, bool> > filter, bool trackingEnabled = false)
        {
            var dbQuery = this.modelSet.AsQueryable();

            var item = trackingEnabled
                            ? dbQuery.FirstOrDefault(filter)
                            : dbQuery.AsNoTracking().FirstOrDefault(filter);

            foreach (string fk in this.CollectionNavigationProperties)
            {
                context.Entry(item).Collection(fk).Load();
            }

            foreach (string fk in this.ReferenceNavigationProperties)
            {
                context.Entry(item).Reference(fk).Load();
            }

            return(item);
        }