c# ef怎么添加ef 根据条件修改改

16:24 提问
EF框架DBfirst,表的字段增加后,实体的字段无法同步添加
如题,后期因为用户要求在一张表里添加了一个字段,然后想在实体里更新一下。
通过从数据库更新到模型后会提示报错,“已存在具有相同键的条目”。我把模型删了之后,重新添加也不行
删除后整个模型都添加不了,而且报的错误与之前相同。如果把整个模型都删除,重新弄得话,确实可以。但是数据库里有很多表都是没用。
跪求大神帮助。刚学EF的菜鸟一个!!!!
按赞数排序
微软主推的是CodeFrist
如果担心自己学习速度
或者习惯于DBfirst
可以考虑使用EFPowerTools 这个扩展包
可以对现有数据库结构进行解析 生成model 以及表关系
方便向CodeFirst 过度和学习。
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐C# EF框架修改问题
[问题点数:20分,结帖人lyxxly]
本版专家分:0
结帖率 60%
CSDN今日推荐
本版专家分:448910
2017年 总版技术专家分年内排行榜第十2013年 总版技术专家分年内排行榜第八
2017年2月 总版技术专家分月排行榜第三
2018年6月 .NET技术大版内专家分月排行榜第一2018年1月 .NET技术大版内专家分月排行榜第一2017年5月 .NET技术大版内专家分月排行榜第一2017年4月 .NET技术大版内专家分月排行榜第一2017年3月 .NET技术大版内专家分月排行榜第一2017年2月 .NET技术大版内专家分月排行榜第一2016年10月 .NET技术大版内专家分月排行榜第一2016年8月 .NET技术大版内专家分月排行榜第一2016年7月 .NET技术大版内专家分月排行榜第一
2018年4月 .NET技术大版内专家分月排行榜第二2018年3月 .NET技术大版内专家分月排行榜第二2017年12月 .NET技术大版内专家分月排行榜第二2017年9月 .NET技术大版内专家分月排行榜第二2017年7月 .NET技术大版内专家分月排行榜第二2017年6月 .NET技术大版内专家分月排行榜第二2016年12月 .NET技术大版内专家分月排行榜第二2016年9月 .NET技术大版内专家分月排行榜第二2016年6月 .NET技术大版内专家分月排行榜第二2016年3月 .NET技术大版内专家分月排行榜第二2016年1月 .NET技术大版内专家分月排行榜第二2015年12月 .NET技术大版内专家分月排行榜第二2015年2月 .NET技术大版内专家分月排行榜第二2015年1月 .NET技术大版内专家分月排行榜第二2014年11月 .NET技术大版内专家分月排行榜第二2014年5月 .NET技术大版内专家分月排行榜第二2014年4月 .NET技术大版内专家分月排行榜第二2012年2月 多媒体/设计/Flash/Silverlight 开发大版内专家分月排行榜第二
本版专家分:1629
结帖率 98.67%
本版专家分:23079
本版专家分:8
本版专家分:0
结帖率 60%
本版专家分:17456
本版专家分:63277
本版专家分:63277
匿名用户不能发表回复!|
CSDN今日推荐与大家一起分享学习心得
EntityFramework中常用的数据修改方式
上一篇文章里提到了
,那么修改对象值也有多种方式
同样是官方推荐的方式,先查询出来,再对要修改的字段赋值,这也应该是用的比较多的。
还是手动创建对象,然后附加,需要改哪个字段值,就写出来,最后 保存就行。跟第一种就差了从数据库查询。
手动创建对象,然后放入EF容器中,然后把状态设定为Modified,再把要修改的字段的IsModified属性设置为true,
注意,不需要修改的字段,也要写出来,只是IsModified属性设置为false就可以了,因为如果不把字段列出来,查询时会把这一列更新为Null,我想这不是我们想看到的。
当字段比较多的时候,这种方法还是比较麻烦的。
第一种就不用说了,至少要两次查询才能执行完成。重点看后两种,只用一次
技术交流群
欢迎加入.net技术交流群
没有更多推荐了,EF操作-修改部分字段
在做项目的时候,肯定会用到更新数据库中的某条记录,而更新的时候,往往是更新数据库中的某几个字段,而不是全部字段,在此我们假设一个实体(TUsers)有如下字段:UserId,Account,Password,CreateDate,其中UserId是主键,自动增长。
修改方式一(修改全部字段)会比较麻烦
CodeFirstContext context = new CodeFirstContext()
TUsers user = new TUsers()
user.UserId = 0
user.Account = "administrator"
user.Password = "456"
user.CreateDate = DateTime.Now.AddYears(-1)
context.Users.Attach(user)
context.Entry(user).State = System.Data.Entity.EntityState.Modified
context.SaveChanges()
var userlist = context.Users.ToList()
foreach (var u in userlist)
Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password))
修改方式二、先查出来,修改以后,在写回去,代码如下:
CodeFirstContext context = new CodeFirstContext()
TUsers user = context.Users.Where(d =& d.UserId == 0).FirstOrDefault&TUsers&()
user.Account = "administrator"
context.SaveChanges()
var userlist = context.Users.ToList()
foreach (var u in userlist)
Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password))
修改方式三、
还是手动创建对象,然后附加,需要改哪个字段值,就写出来,最后 保存就行
CodeFirstContext context = new CodeFirstContext()
TUsers user = new TUsers()
user.UserId = 0
var newuser = context.Users.Attach(user)
newuser.Account = "admin123"
context.SaveChanges()
var userlist = context.Users.ToList()
foreach (var u in userlist)
Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password))
手动创建对象,然后放入EF容器中,然后把状态设定为Modified,再把要修改的字段的IsModified属性设置为true,
注意,不需要修改的字段,也要写出来,只是IsModified属性设置为false就可以了,因为如果不把字段列出来,查询时会把这一列更新为Null,我想这不是我们想看到的。
当字段比较多的时候,这种方法还是比较麻烦的
CodeFirstContext context = new CodeFirstContext()
TUsers user = new TUsers()
user.UserId = 0
user.Account = "admin789456"
//user.CreateDate = DateTime.Now
context.Users.Attach(user)
//如果不设置,则将修改为null
context.Entry(user).State = System.Data.Entity.EntityState.Modified
context.Entry(user).Property("CreateDate").IsModified = false
context.Entry(user).Property("Account").IsModified = true
context.SaveChanges()
var userlist = context.Users.ToList()
foreach (var u in userlist)
Console.WriteLine(string.Format("账号:{0} 密码:{1}", u.Account, u.Password))
没有更多推荐了,c# ef 修改提示,ObjectStateManager 中已存在具有同一键的对象。_百度知道
c# ef 修改提示,ObjectStateManager 中已存在具有同一键的对象。
异常提示:ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。网上看什么先查出来再update,设置modify啊,都不好用。第一个先查出来不可靠,因为我是封装类的update(如图代码,实体都是TEntity),不能写死的...
我有更好的答案
可能之前已经修改了entity的属性,并且objectStageManager中的状态已经是Modified了。 如果此时再次指定Modified会失败。
嗯嗯,应该是这个问题,有什么好的解决之道
先判断状态,在修改状态试试&&&&&&if&(dbContext.Entry(entity).State&==&System.Data.Entity.EntityState.Detached&&&&&&&&&&&&&&&&&&&&&&&&||&dbContext.Entry(entity).State&==&System.Data.Entity.EntityState.Unchanged)&&&&&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&&&&&dbContext.Entry(entity).State&==&System.Data.Entity.EntityState.M&&&&&&&&&&&&&&&&&&&&&&&&//&todo:&commit&&&&&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&&&&&//&...
采纳率:34%
来自团队:
是不是你表的主键有重复的
我调试过了,主键是没重复的,这点我打包票,就是没有重复,我才感到奇怪,这才问问知友们有什么好的解决之道
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 ef 动态查询条件 的文章

 

随机推荐