• 分享一个老外写的Entityframework的知识库


    /// <summary>
        /// Repository base class used with DbContext
        /// Via http://dotnetspeak.com/index.php/2011/03/repository-pattern-with-entity-framework/
        /// </summary>
        /// <typeparam name="TContext">Type of DdContext that this repositiory operates on</typeparam>
        public class EFRepository<TContext> : IDisposable
            where TContext : DbContext, IObjectContextAdapter, new()
        {
            private TContext context;
    
            public TContext Context
            {
                get { return context; }
            }
    
            private EFRepository()
            {
    
            }
    
            /// <summary>
            /// Create new instance of repository
            /// </summary>
            /// <param name="connecstionStringName">Connection string name from .config file</param>
            public EFRepository(string connecstionStringName)
            {
                context = new TContext();
                context.Database.Connection.ConnectionString =
                    ConfigurationManager.ConnectionStrings[connecstionStringName].ConnectionString;
            }
    
            /// <summary>
            /// Dipose repository
            /// </summary>
            public void Dispose()
            {
                if (context != null)
                {
                    context.Dispose();
                    context = null;
                }
            }
    
    
            /// <summary>
            /// Select data from database
            /// </summary>
            /// <typeparam name="TItem">Type of data to select</typeparam>
            /// <returns></returns>
            public IQueryable<TItem> Select<TItem>()
               where TItem : class, new()
            {
                PropertyInfo property = GetDbSet(typeof(TItem));
    
                DbSet<TItem> set = property.GetValue(context, null) as DbSet<TItem>;
    
                return set;
            }
    
            /// <summary>
            /// Insert new item into database
            /// </summary>
            /// <typeparam name="TItem">Type of item to insert</typeparam>
            /// <param name="item">Item to insert</param>
            /// <returns>Inserted item</returns>
            public TItem Insert<TItem>(TItem item)
                where TItem : class, new()
            {
                DbSet<TItem> set = GetDbSet(typeof(TItem)).GetValue(context, null) as DbSet<TItem>;
                set.Add(item);
                context.SaveChanges();
                return item;
            }
    
            /// <summary>
            /// Update na item
            /// </summary>
            /// <typeparam name="TItem">Type of item to update</typeparam>
            /// <param name="item">Item to update</param>
            /// <returns>Updated item</returns>
            public TItem Update<TItem>(TItem item)
                where TItem : class, new()
            {
                DbSet<TItem> set = GetDbSet(typeof(TItem)).GetValue(context, null) as DbSet<TItem>;
                set.Attach(item);
                context.Entry(item).State = System.Data.EntityState.Modified;
                context.SaveChanges();
                return item;
            }/// <summary>
            /// Delete an item
            /// </summary>
            /// <typeparam name="TItem">Type of item to delete</typeparam>
            /// <param name="item">Item to delete</param>
            public void Delete<TItem>(TItem item)
               where TItem : class, new()
            {
                DbSet<TItem> set = GetDbSet(typeof(TItem)).GetValue(context, null) as DbSet<TItem>;
                var entry = context.Entry(item);
                if (entry != null)
                {
                    entry.State = System.Data.EntityState.Deleted;
                }
                else
                {
                    set.Attach(item);
                }
                context.Entry(item).State = System.Data.EntityState.Deleted;
                context.SaveChanges();
            }
    
            private PropertyInfo GetDbSet(Type itemType)
            {
                var properties = typeof(TContext).GetProperties().Where(item => item.PropertyType.Equals(typeof(DbSet<>).MakeGenericType(itemType)));
    
                return properties.First();
            }
  • 相关阅读:
    XAML实例教程系列
    XAML实例教程系列
    XAML实例教程系列
    正则表达式 修改流程 过程是崎岖的
    Codeforces Round #379 (Div. 2) 解题报告
    (DFS)codevs1004-四子连棋
    (BFS)poj2935-Basic Wall Maze
    (BFS)poj1465-Multiple
    (BFS)uva2554-Snakes & Ladders
    (BFS)hdoj2377-Bus Pass
  • 原文地址:https://www.cnblogs.com/pigwing/p/2674727.html
Copyright © 2020-2023  润新知