关于EF中更新数据库数据的问题

qq_32586909 2016-02-23 05:48:46

public class A
{
string id{get;set;}
string name{get;set;}
}

在Controller中,如果

public ActionResult Edit(A b)
{
A a=db.A.SingleOrDefault(d => d.id == b.id);
a.name=b.name;
da.SaveChanges();
}

就能更新,但如果

public ActionResult Edit(A b)
{
A a=db.A.SingleOrDefault(d => d.id == b.id);
a=b;
da.SaveChanges();
}

就更新不了,为什么会这样?除了一个属性一个属性的赋值之外有没有其他办法?不然如果有几十上百个属性不是要活活累死
...全文
482 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
丰云 2016-02-24
  • 打赏
  • 举报
回复
给个简单的例子参考下:

    public class Temp
    {
        public int id { get; set; }
        public string name { get; set; }
        public string phone { get; set; }
        public Temp() { }
        public Temp(string name, string phone) {
            this.name = name;
            this.phone = phone;
        }
    }

var t1 = new Temp("张三","13677889966");
            t1.id = 1;
            var t2 = new Temp();
            t2.id = 2;
            var t1s = t1.GetType().GetProperties();
            var t2s = t2.GetType().GetProperties();
            foreach (var p in t1s)
            {
                foreach (var q in t2s)
                {
                    if (q.Name == p.Name)
                    {// 这里可能会根据需要做一些判断和类型转换,常用类型就那么多,因此代码不会很长
                        q.SetValue(t2, p.GetValue(t1), null);
                    }
                }
            }
丰云 2016-02-24
  • 打赏
  • 举报
回复
请问楼主,你在哪门语言里,用对象给另一个对象赋值,不是一个属性一个属性的赋值?? 为什么独独对EF就要苛刻对待呢?? 另外,如果你知道用反射,完全可以用用反射写一个通用的对象修改方法,这不是什么很困难的事,不超过一百行代码,可以用一辈子
wanghui0380 2016-02-24
  • 打赏
  • 举报
回复
EF是通过行状态去判定,所以你需要修改行状态,或者采用附加方法吧实体附件给dbcontext
秋的红果实 2016-02-23
  • 打赏
  • 举报
回复
用代码获取A的字段名,然后循环语句搞定
qq_32586909 2016-02-23
  • 打赏
  • 举报
回复
引用 2 楼 fei2yun 的回复:
[quote=引用 1 楼 wanghui0380 的回复:] A a=db.A.SingleOrDefault(d => d.id == b.id); a.name=b.name; da.SaveChanges(); ???? da是什么 ?? 财务说,从谁手里拿地,就交给谁放回去。不然帐就乱了。
不管他这个da是不是dal之类的东西,这个引用类型的赋值当然是失效的。 就等于是将a的引用到了b同一个对象。 前者可以,是因为是值类型赋值,修改的就是查询到的结果,后者是传递b实例化给a,但是使用的是b的实例化。 [/quote] 那我应该怎么样用EF更新数据?总不能a如果有几百个属性,我就要写几百条a.XX=b.XX吧?有没有什么方法能把整个b的值赋给a?
qq_32586909 2016-02-23
  • 打赏
  • 举报
回复
引用 1 楼 wanghui0380 的回复:
A a=db.A.SingleOrDefault(d => d.id == b.id); a.name=b.name; da.SaveChanges(); ???? da是什么 ?? 财务说,从谁手里拿地,就交给谁放回去。不然帐就乱了。
抱歉,那个就是db,我打错了而已
wanghui0380 2016-02-23
  • 打赏
  • 举报
回复
A a=db.A.SingleOrDefault(d => d.id == b.id); a.name=b.name; da.SaveChanges(); ???? da是什么 ?? 财务说,从谁手里拿地,就交给谁放回去。不然帐就乱了。

62,272

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧