首页 > 技术文章 > Entity Framework Code First 常用方法集成

kezhiping 2014-06-03 14:23 原文

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using System.Text;
using SnsDB;
using EntityFramework.Extensions;
using EntityFramework.Reflection;
using System.Data.SqlClient;
using System.Transactions;

namespace SnsDAL
{
    public partial class Repository
    {
        /// <summary>
        /// 创建一条记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        public int Create<T>(T model) where T : class
        {
            int Result = 0;
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                db.Set<T>().Add(model);
                db.Configuration.ValidateOnSaveEnabled = false;
                Result = db.SaveChanges();
                db.Configuration.ValidateOnSaveEnabled = true;
                return Result;
            }
        }

        /// <summary>
        /// 根据主键修改实体的全部信息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="model"></param>
        /// <returns></returns>
        public int Update<T>(T model) where T : class
        {
            int Result = 0;
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                if (db.Entry<T>(model).State == EntityState.Detached)
                {
                    db.Set<T>().Attach(model);
                    db.Entry<T>(model).State = EntityState.Modified;
                }
                db.Configuration.ValidateOnSaveEnabled = false;
                Result = db.SaveChanges();
                db.Configuration.ValidateOnSaveEnabled = true;
                return Result;
            }
        }

        /// <summary>
        /// 只删除一条记录
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="ids"></param>
        public int Delete<T>(Expression<Func<T, bool>> express) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                T model = db.Set<T>().SingleOrDefault(express);
                db.Set<T>().Remove(model);
                return db.SaveChanges();
            }
        }

        /// <summary>
        /// 根据条件获取一个实体
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="express"></param>
        /// <returns></returns>
        public T GetModel<T>(Expression<Func<T, bool>> express) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                T model = db.Set<T>().SingleOrDefault(express);
                return model;
            }
        }

        /// <summary>
        /// 根据条件获取列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="express"></param>
        /// <returns></returns>
        public IEnumerable<T> GetList<T>(Expression<Func<T, bool>> express) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Set<T>().Where(express).ToList();
            }
        }

        /// <summary>
        /// 获取列表
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public IEnumerable<T> GetList<T>() where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Set<T>().ToList();
            }
        }

        /// <summary>
        /// 批量删除
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="express"></param>
        /// <returns></returns>
        public int DeleteRange<T>(Expression<Func<T, bool>> express) where T : class
        {
            int Result = 0;
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                db.Set<T>().Where(express).Delete();
                db.Configuration.ValidateOnSaveEnabled = false;
                Result = db.SaveChanges();
                db.Configuration.ValidateOnSaveEnabled = true;
            }
            return Result;
        }

        /// <summary>
        /// 批量添加
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="List"></param>
        /// <returns></returns>
        public int AddRange<T>(IList<T> List) where T : class
        {
            int Result = 0;
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                db.Set<T>().AddRange(List);
                db.Configuration.ValidateOnSaveEnabled = false;
                Result = db.SaveChanges();
                db.Configuration.ValidateOnSaveEnabled = true;
            }
            return Result;
        }

        /// <summary>
        /// 批量修改  例:xx.update(p=>p.id==1,p=>new xx{p.name="修改"});
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="where">条件</param>
        /// <param name="updateExpression">修改的内容</param>
        /// <returns></returns>
        public int UpdateRange<T>(Expression<Func<T, bool>> where, Expression<Func<T, T>> updateExpression) where T : class
        {
            int Result = 0;
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                using (TransactionScope Transaction = new TransactionScope())
                {
                    db.Configuration.ValidateOnSaveEnabled = false;
                    db.Set<T>().Update(where, updateExpression);
                    db.Configuration.ValidateOnSaveEnabled = true;
                    Transaction.Complete();
                    Result = 1;
                }
            }
            return Result;
        }


        /// <summary>
        /// 执行一条sql返回list
        /// </summary>
        /// <typeparam name="T">一般为ViewModel</typeparam>
        /// <param name="strsql"></param>
        /// <returns></returns>
        public IEnumerable<T> GetList<T>(string strsql) where T:class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.SqlQuery<T>(strsql);
            }
        }

        /// <summary>
        /// 执行一条sql返回list
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strsql">一般为ViewModel</param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public IEnumerable<T> GetList<T>(string strsql, SqlParameter[] paras) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.SqlQuery<T>(strsql, paras);
            }
        }

        /// <summary>
        /// 执行一条sql返回一个对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strsql"></param>
        /// <returns></returns>
        public T GetList<T>(string strsql) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.SqlQuery<T>(strsql).Cast<T>().First();
            }
        }

        /// <summary>
        /// 执行一条sql返回一个对象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="strsql"></param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public T GetList<T>(string strsql,SqlParameter[] paras) where T : class
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.SqlQuery<T>(strsql,paras).Cast<T>().First();
            }
        }

        /// <summary>
        /// 执行一条sql,一般为添加或修改或删除操作
        /// </summary>
        /// <param name="strsql"></param>
        /// <returns>受影响的行数</returns>
        public int ExecuteSqlCommand(string strsql)
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.ExecuteSqlCommand(strsql);
            }
        }

        /// <summary>
        /// 执行一条sql,一般为添加或修改或删除操作
        /// </summary>
        /// <param name="strsql"></param>
        /// <param name="paras">参数</param>
        /// <returns></returns>
        public int ExecuteSqlCommand(string strsql,SqlParameter[] paras)
        {
            using (SnsDB_Intermodal db = new SnsDB_Intermodal())
            {
                return db.Database.ExecuteSqlCommand(strsql,paras);
            }
        }
    }
}

  小人技术不才,以上仅提供参考。还希望大神多多指点。
    
      再次推荐一个  ASP.NET MVC群   171560784   
       
     

 

推荐阅读