• MVC EF 修改 封装类 通用泛型方法(一)


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.Entity.Infrastructure;
    using System.Data.Entity;
    
    namespace DAL
    {
        public class EF_Help
        {
            DbContext db;  //数据上下文
            /// <summary>
            ///  修改 个别 数据  
            /// </summary>
            /// <param name="model">要修改的实体对象</param>
            /// <param name="proNames">要修改的 属性 名称</param>
            /// <returns></returns>
            public int Modify<T>(T model, params string[] proNames) where T : class
            {
                DbEntityEntry entry = db.Entry<T>(model);
                entry.State = EntityState.Unchanged;
                foreach (string proName in proNames)
                {
                    entry.Property(proName).IsModified = true;
                }
                db.Configuration.ValidateOnSaveEnabled = false;
                return db.SaveChanges();
            }
    
            /// <summary>
            ///  修改 多数 数据, 个别数据除外,proNames 不写 则是 修改全部
            /// </summary>
            /// <param name="model">要修改的实体对象</param>
            /// <param name="proNames">不需要要修改的 属性 名称</param>
            /// <returns></returns>
            public int ModifyWithOutproNames<T>(T model, string prymartKey, params string[] proNames) where T : class
            {
    
                DbEntityEntry entry = db.Entry<T>(model);
                entry.State = EntityState.Unchanged;
                var properties = model.GetType().GetProperties();
                for (int i = 0; i < properties.Length; i++)
                {
                    if (properties[i].PropertyType.Name.Contains("ICollection")
                        || properties[i].Name == prymartKey
                        || proNames.Contains(properties[i].Name)) continue;// 排除 外面 主键  proNames
                    entry.Property(properties[i].Name).IsModified = true;
                }
                db.Configuration.ValidateOnSaveEnabled = false;
                return db.SaveChanges();
            }
    
            public EF_Help(DbContext dbContext)
            {
                db = dbContext;  
            }
        }
    }

    调用:

    using System;
    using System.Linq;
    using System.Net;
    using System.Web;
    using System.Web.Mvc;
    using KT_Product_Show_Market.Areas.Account.Models;
    using Newtonsoft.Json;
    using EntityFramework.Extensions;
    using System.Collections;
    
    
    namespace KT_Product_Show_Market.Areas.Account.Controllers
    {
        public class UserController : Controller
        {
            public UserController()
            {
                ef_Help = new DAL.EF_Help(db);
            }
            KT_Product_MarketEntities db = new KT_Product_MarketEntities();
            DAL.Custom_Expression CE = new DAL.Custom_Expression();
            DAL.EF_Help ef_Help;
    
            [HttpPost]
            [ActionName("Edit")]
            public int Edit_Post(TraderInfo post_model)
            {
                int Temp = 0;
                if (string.IsNullOrEmpty(post_model.LoginPassward))
                {
                    Temp = ef_Help.ModifyWithOutproNames<TraderInfo>(post_model, "LoginPassward");
                }
                else
                {
                    Temp = ef_Help.ModifyWithOutproNames<TraderInfo>(post_model);
                }
                return Temp;
            }
        }
    }

      前台 不显示   实际密码,点击 修改密码 ,显示 文本框,然后就可以设置新密码了。

    后台如果 有接收 密码,则执行 ef_Help.ModifyWithOutproNames<TraderInfo>(post_model, "LoginPassward");   除了LoginPassward  以外的列 都会修改。

    如果没有 接收到密码 就 执行 ef_Help.ModifyWithOutproNames<TraderInfo>(post_model);  修改所有列

  • 相关阅读:
    C# 轻松读取、改变文件的创建、修改、访问时间 z
    C#中将dll汇入exe z
    ASP.NET中引用dll“找不到指定模块"的完美解决办法 z
    C# 调用第三方DLL z
    [ACM_贪心] Radar Installation
    Beauty Contest
    [ACM_几何] Wall
    [ACM_几何] Pipe
    [ACM_几何] Fishnet
    [ACM_动态规划] 找零种类
  • 原文地址:https://www.cnblogs.com/bingguang/p/4451189.html
Copyright © 2020-2023  润新知