关于在EF中通用方法

在EF中有时需要用到一些通用类,在后端模型和前端模型在某些场合需要模型分离,

例如数据模型和试图模型中用到的增删改功能

public class DBHelper<V, T>
        where V : class ,new()
        where T : class ,new()
    {

public Result Update(V Entity)
        {
            using (var db = new DbContext())
            {

//此处模型转换
                var model = EntityOperation<T>.Conversion(Entity);
                db.Set<T>().Attach(model);
                db.Entry<T>(model).State = System.Data.Entity.EntityState.Modified;
                return this.SaveChanges(db);
            }
        }
        public Result UpdateForT(T Entity)
        {
            using (var db = new DbContext())
            {
                db.Set<T>().Attach(Entity);
                return this.SaveChanges(db);
            }
        }
    }

转换模型方法

/// <summary>
        /// 转换一个字段相同的实体
        /// </summary>
        /// <param name="InObject">有值需要转换的实体</param>
        /// <returns>返回转好的 TEntity</returns>
        public static TEntity Conversion(object InObject)
        {
            var _temp = InObject.GetType().GetProperties();
            TEntity entity = new TEntity();
            foreach (var item in _temp)
            {
                object ovj = item.GetValue(InObject, null);
                if (ovj != null)
                {
                    var _obj = entity.GetType().GetProperties().FirstOrDefault(p => p.Name.ToLower() == item.Name.ToLower());
                    if (_obj != null)
                        _obj.SetValue(entity, ovj);
                }
            }
            return entity;
        }

时间: 2024-10-12 23:26:03

关于在EF中通用方法的相关文章

Linq to EF 中Contains的演变

在早期Linq to EF中没有提供对Contains方法的支持, 那时候只能将所有数据获取到内存中,然后通过Linq to Object的Contains方法来达到相同的效果(如果多表筛选也可以使用Any方法实现,也可采用自定义linq的方式实现,但这里我们主要讨论使用数组筛选表的情况). 从Linq to EF 4.0 开始加入了对Contains的支持,使用方式如下: 以上linq最终会被翻译为如下形式的sql语句: SELECT [Extent1].[Name] AS [Name] FR

用DBContext (EF) 实现通用增删改查的REST方法

我们用ADO.NET Entity Data Model来生成实体类后,一般都会对这些类进行基本的增删改查操作,如果每个类都要写这些基本的方法,实在太乏味了.下面就是通过step by step的方式介绍如何用DBContext来实现通用增删改查的REST方法,以及实现过程中容易出现的问题. 1. 打开vs2012,新建一个class library的项目 2. 新加一个ADO.NET Entity Data Model项到这个项目 3. 打开App.Config, 修改res://* 为res

EF Dal通用类

一个通用的ef  dal处理类是非擦汗那个提高工作效率的 using System; using System.Collections.Generic; using System.Data.Entity.Infrastructure; using System.Data.Entity.Migrations; using System.Data.SqlClient; using System.Linq; using System.Linq.Expressions; using System.Ref

.NET在EF中使用sql,用动态类吧!

.NET在EF中使用sql,用动态类吧! 前言 在.NET中使用Entity Framework能快速.方便地结合LINQ来对数据库进行一系列的增删改查操作.但是由于EF根据表达式最后生成通用的sql来执行,进行具体的数据库操作.根据本人使用EF的经验,对于增.删.改的操作,可以直接使用EF的接口进行快速开发.但是对于查询的操作,最好是使用EF调用sql来操作. 问题呈现 在EF中调用sql进行数据查询后,需要返回一个指定类型的数据列表,那么这个类型是需要在调用的时候指定的.我们就会遇到这种问题

EF中执行sql语句

EF原理 EF 会自动把 Where().OrderBy().Select()等这些编译成"表达式树(Expression Tree)",然后会把表达式树翻译成 SQL 语句去执行.(编译原理,AST)因此不是"把数据都取到内存中,然后使用集合的方法进行数据过滤",因此性能不会低.但是如果这个操作不能被翻译成 SQL 语句,则或者报错,或者被放到内存中操作,性能就会非常低 跟踪EF的查询Sql语句: DbContext 有一个 Database 属性,其中的 Log

EF中逆变和协变

EF中的增删改查: 实现步骤: 1.声明一个EF的上下文. bjhksjEntities dbContext = new bjhksjEntities(); 2.声明一个实体. HKSJ_USERS user = new HKSJ_USERS(); user.LoginName = "ssss"; user.Mail = "ssss"; user.PassWord = "ssss"; user.Plane = "ssss";

判断记录是否存在的通用方法

在数据写入到数据库时,通常要根据某些条件检测记录是否存在,然后决定是否要写入,数据写入分两种情形:新添加数据和更新数据,在通用权限底层中,对这类判断进行了封装. 位置截图 主要核心代码部分         /// <summary>        /// 判断存在        /// </summary>        /// <param name="parameters"></param>        /// <param

数据库事务及其EF中如何处理事务

一.基础知识 1)         使用事务级别ReadUnCommited 会产生脏读现像,意味着读取到的为UnCommited(未提交)的数据.怎么理解呢?在使用该隔离级别的事务开始后.更新了数据库某一行的数据,但是事务的工作量比较大,后续还有一大堆代码还没执行完呢.不巧的是有个哥们过来读数据了,这个时候读到的就是未提交的值,如果后继工作一切正常,也没什么影响.一旦后面的代码执行中出错,就会产生不一致的错误,适用于对事务极度自信的情况下,特点为可读不可改.关于不可改需解释一下,MS SQL中

.NET基础架构方法—DataTableToExcel通用方法

p { display: block; margin: 3px 0 0 0; } --> .NET架构基础方法—DataTableToExcel通用方法(NPOI) 今天封装DataTaleToExcel通用方法,也是大家开发中特别常用的.首先去下载NPOI,链接http://npoi.codeplex.com/ ,使用包中的net4.0版本的dll,全部引用.官网中已经给了足够的示例,我只拿来异步分,给类命名为ExcelTools.cs .下面上代码 1 using System; 2 usi