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() == "&nbsp;")//一些属性由于前台的原因  传过来的值会是&nbsp;  这里做一下处理
                        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; }

    }

				
时间: 2024-11-05 12:25:04

EF中更新操作 ID自增但不是主键 ;根据ViewModel更新实体的部分属性的相关文章

mysql insert插入时实现如果数据表中主键重复则更新,没有重复则插入的四种方法

[CSDN下载] Powerdesigner 设计主键code不能重复等问题 [CSDN博客] Oracle中用一个序列给两个表创建主键自增功能的后果 [CSDN博客] MySQL自增主键删除后重复问题 [CSDN博客] mysql 主从复制 双主从复制原理 防止主键重复问题(必看) [CSDN博客] replace into导致mysql自增列导致主键重复问题分析 [CSDN博客] 一个循环更新某库所有表所有非主键列的值方法(sql 2005 & mysql) [CSDN博客] mysql i

设计表的时候,对于自增列做逻辑主键使用的一点思考

本文出处:http://www.cnblogs.com/wy123/p/7581380.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错误进行修正或补充,无他) 关于自增列 自增列作为数据库的一个特性之一,在MSSQL和MySQL以及Oracle中都被支持.之前在网上发现一个类似的问题,是关于MySQL的:“为什么InnoDB表最好要有自增列做主键?”自增列作为一项特性,(可能)会应用到表的设计方面,不管是在那种数据库平台下.抛开具

SQL Server 如何添加删除外键、主键,以及更新自增属性

1.添加删除主键和外键 例如: -----删除主键约束DECLARE @NAME SYSNAMEDECLARE @TB_NAME SYSNAMESET @TB_NAME = 'Date'SELECT TOP 1  @NAME=NAME FROM SYS.OBJECTS WITH(NOLOCK)WHERE TYPE_DESC ='PRIMARY_KEY_CONSTRAINT' AND PARENT_OBJECT_ID = (    SELECT OBJECT_ID    FROM SYS.OBJE

后台操作日志,插入数据获取的该数据主键ID为null

代码如下: @Override public void saveTopicResource(TopicResourceModel model, Integer userId) { TopicResource topicResource = new TopicResource(); BeanUtils.copyProperties(model, topicResource); int result=0; if (model.getResId() == null) { topicResource.s

SQL中的每一张表都必须设有主键吗

主键的作用: 1)保证实体的完整性; 2)加快数据库的操作速度 3)在表中添加新记录时,数据库会自动检查新记录的主键值,不允许该值与其他记录的主键值重复. 4) 数据库自动按主键值的顺序显示表中的记录.如果没有定义主键,则按输入记录的顺序显示表中的记录. 主键不是非要不可,可以从: 1.是否满足业务要求 2.数据查询效率(主键可以提高查询效率,当然合理的索引替代也可以) 这两个角度权衡是否需要主键. 这要看表的功能. 利用来存储大量数据,并需要经常查询的,建立主键可以加快查询效率从而降低服务器的

在oracle中查询已知表名的表中所有字段名,每个字段是否是主键,是否是外键,是否为空的sql语句

查询表的所有列及其属性:select t.*,c.COMMENTS from user_tab_columns t,user_col_comments c where t.table_name = c.table_name and t.column_name = c.column_name and t.table_name = women;查找表的主键:select cu.* from user_cons_columns cu, user_constraints au where cu.cons

将数据库A中&quot;x&quot;表完整复制到数据库B中的方法(含: 表结构、索引、主键、约束及权限等)

//导出A数据库 -> x表(不含数据) exp A/[email protected] file=/tmp/exp_tmp_x.dmp tables=x rows=n; //导入B数据库 -> x表 imp B/[email protected] file=/tmp/exp_tmp_x.dmp tables=x ignore=y; 批量建表时: sh exp.sh sh imp.sh

在EF中使用Expression自动生成p=&gt;new Entity(){X=&quot;&quot;,Y=&quot;&quot;,..}格式的Lambda表达式灵活实现按需更新

一.基本介绍      回忆:最早接触Expression是在学校接触到EF的时候,发现where方法里的参数是Expression<Func<T,bool>>这么一个类型,当初也只是看到了,也没有过多的去探究,只是知道传入lambda表达式使用即可,对于Expression和里面的Func<T,bool>到底是怎么一种关系,都不清楚.目前也不是很了解,只知道一些简单的使用,但是可以解决自己目前的一些问题就好了.毕竟作为一名18年的应届毕业生,能力有限. 今天,就简单的

MySql中测试GUID 与Int自增主键 性能对比 总结适用场景【转】

一. 创建以下三个数据表: int 主键自增表, guid主键表, 关联以上两个表的关系表tbl_test_relation CREATE TABLE `tbl_test_int` (    `id` INT(11) NOT NULL AUTO_INCREMENT,    `name` VARCHAR(50) NULL DEFAULT NULL,    `comment` VARCHAR(100) NULL DEFAULT NULL,    PRIMARY KEY (`id`))COMMENT=