EF中更新操作 ID自增但不是主键 ;根据ViewModel更新实体的部分属性
//ID自增但不是主键的情况
public int Update_join<TEntity>(TEntity entity) where TEntity : class
{
dbcontext.Set<TEntity>().Attach(entity);
PropertyInfo[] props = entity.GetType().GetProperties();
foreach (PropertyInfo prop in props)
{
if(prop.Name=="ID")continue;
if (prop.GetValue(entity, null) != null)
{
if (prop.GetValue(entity, null).ToString() == " ")//一些属性由于前台的原因 传过来的值会是  这里做一下处理
dbcontext.Entry(entity).Property(prop.Name).CurrentValue = null;
dbcontext.Entry(entity).Property(prop.Name).IsModified = true;
}
}
return dbcontext.SaveChanges();
}
调用方式:db.Update_join(partySummaryTableEntity);
//根据ViewModel更新实体的部分属性
public int UpdateEntityFields<TEntity>(TEntity entity, List<string> fileds) where TEntity : class
{
if (entity != null && fileds != null)
{
dbcontext.Set<TEntity>().Attach(entity);
var SetEntry = ((IObjectContextAdapter)dbcontext).ObjectContext.
ObjectStateManager.GetObjectStateEntry(entity);
foreach (var t in fileds)
{
SetEntry.SetModifiedProperty(t);
}
}
return dbcontext.SaveChanges();
}
//上面的参数list是将ViewModel的属性整理成的集合,方法如下
public static List<string> GetDeleteFiles()
{
List<string> list = new List<string>();
PropertyInfo[] props = new DeleteEntity().GetType().GetProperties();//得到ViewModel属性集合
foreach (PropertyInfo propertyInfo in props)
{
list.Add(propertyInfo.Name);
}
return list;
}
PS:eg一个ViewModel:
public class DeleteEntity : INDeleteAudited
{
public bool F_DeleteMark { get; set; } /// <summary>
/// 删除实体的用户
/// </summary>
public string F_DeleteUserId { get; set; } /// <summary>
/// 删除实体时间
/// </summary>
public DateTime? F_DeleteTime { get; set; } }
EF中更新操作 ID自增但不是主键 ;根据ViewModel更新实体的部分属性的更多相关文章
- mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法
		[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问 ... 
- EF中主表和附表一起提交的话,如果主附表的主键外键已经设定。
		EF中主表和附表一起提交的话,如果主附表的主键外键已经设定,如果新增同时新增主表和附表的记录,那么在EF同时提交时,不需要人为的设定附表的主表的主键值,EF会自动为附表添加外键值. 
- MYSQL主键存在则更新,不存在则插入的解决方案(ON DUPLICATE KEY UPDATE)
		经常我们使用的最简单的数据库操作就是数据的更新,删除和插入,对于批量删除和插入的方法相信大家都很清楚,那么批量更新估计有的人就不知道了,并且还有批量插入,在插入时若有主键冲突则更新的操作,这在EAV模 ... 
- SQL中的每一张表都必须设有主键吗
		问题描述: 公司的数据库表有时候会看到没有主键的,SQL中的每一张表都必须设有主键吗? 主键的作用: 1)保证实体的完整性: 2)加快数据库的操作速度: 3)在表中添加新记录时,数据库ACCESS会自 ... 
- java中如何操作数据库(增删改查)
		EntityManager 是用来对实体Bean 进行操作的辅助类.他可以用来产生/删除持久化的实体Bean,通过主键查找实体bean,也可以通过EJB3 QL 语言查找满足条件的实体Bean.实体B ... 
- SQL Server 如何添加删除外键、主键,以及更新自增属性
		1.添加删除主键和外键 例如: -----删除主键约束DECLARE @NAME SYSNAMEDECLARE @TB_NAME SYSNAMESET @TB_NAME = 'Date'SELECT ... 
- Mybatis中,当插入数据后,返回最新主键id的几种方法,及具体用法
		insert元素 属性详解 其属性如下: parameterType ,入参的全限定类名或类型别名 keyColumn ,设置数据表自动生成的主键名.对特定数据库(如PostgreSQL),若自动生成 ... 
- 后台操作日志,插入数据获取的该数据主键ID为null
		代码如下: @Override public void saveTopicResource(TopicResourceModel model, Integer userId) { TopicResou ... 
- 在oracle中查询已知表名的表中所有字段名,每个字段是否是主键,是否是外键,是否为空的sql语句
		查询表的所有列及其属性:select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c ... 
随机推荐
- ThreadLocal类的简单使用
			1.概述变量值的共享可以使用public 是static 变量的形式,所有的线程都使用同一个public static 变量. 如实现线程内的共享变量,jdk提供了ThreadLocal来解决这个问题 ... 
- 最大黑区域-DFS
			最大黑区域 Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Submit Status Practic ... 
- 站点的rel="alternate"属性
			概述 今天看决战平安京官网源码,突然看到了rel的alternate属性,百度了一下,记录下来,供以后开发时参考,相信对其他人也有用. PC端rel 在pc版网页上,添加指向对应移动版网址的特殊链接r ... 
- Oracle列转行函数版本不兼容解决方案
			业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不 ... 
- dubbo集群容错解决方案
			dubbo主要核心部件 Remoting:网络通信框架,实现了sync-over-async和request-response消息机制. RPC:一个远程过程调用的抽象,支持负载均衡.容灾和集群功能. ... 
- gcc编译参数详解概述
			gcc 编译器是经常使用的,可是,自己却没有针对它做过专门的研究,当遇到问题了,总结一下,算是对未来有个积累吧. 一 关于编译告警: 1 -w : 关闭所有警告,不建议使用 2 -W 开启素有gcc ... 
- 神奇的CSS3混合模式
			神奇的css3混合模式 对于前端开发人员应该都很熟悉Photoshop的图层混合模式,就是几个图层按不同的模式进行混合,实现不同的图像效果.但是当我们前端同学在切这些效果图的时候,基本上就是一刀切的, ... 
- Asp.net 性能监控之压测接口“卡住” 分析
			问题描述:web api项目接口压测.前期并发100,500没出现问题,平均耗时也在几百毫秒.当并发1000时候,停留等待许久,看现象是jemeter卡住,没返回,时间过了许久,才正常. 解决过程: ... 
- TypeError: Cannot red property 'style' of null 错误解决
			错误信息如下: JSP代码如下: <c:if test ="${not empty excelErrors}"> <div id="excelError ... 
- [NewLife.XCode]实体列表缓存(最土的方法实现百万级性能)
			NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netcore,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示例代码和 ... 
