gpt4 book ai didi

c# - 我可以将对象分配给实体对象吗?

转载 作者:行者123 更新时间:2023-11-30 12:11:06 24 4
gpt4 key购买 nike

我正在使用 ASP.NET MVC4 Web API 和我的 PUT 操作,我想做这样的事情:

public void Put(string id, [FromBody]Foo value)
{
var context = new FooBarEntities();
Foo existingFoo = context.Foos.Where(x => x.Id == id).First();
existingFoo = value;
context.SaveChanges();
}

但是 Foo value 对象中的更改没有保存。如果我要做每个属性,它会像这样工作:

public void Put(string id, [FromBody]Foo value)
{
var context = new FooBarEntities();
Foo existingFoo = context.Foos.Where(x => x.Id == id).First();
existingFoo.Prop1 = value.Prop1;
existingFoo.Prop2 = value.Prop2;
context.SaveChanges();
}

有没有一种方法可以通过分配对象来更新每个属性?

最佳答案

这绝对行不通:

Foo existingFoo = context.Foos.Where(x => x.Id == id).First();
existingFoo = value;

您正在查找它,然后立即用完全不同的内容覆盖引用。

我认为您想将附加您的到上下文,然后进行保存。更多 like this可能会为你做:

context.Foos.AddObject(value);
context.ObjectStateManager.ChangeObjectState(value, System.Data.EntityState.Modified);
context.SaveChanges();

这不需要您首先加载要更新的对象,这很好。如果这样做不行,那么知道这称为 disconnected 之类的更新可能有助于您 future 的谷歌搜索。

如果您手头已有要更新的对象以及新副本,我不知道有什么干净的东西可以为您合并它们。


另一种方式I've done it before 看起来更像是这样,这可能感觉不那么骇人听闻:

var entity = context.Entry(value);
entity.State = EntityState.Modified;
context.SaveChanges();

或者更简洁:

context.Entry(value).State = EntityState.Modified;
context.SaveChanges();

不过,我不记得那是不是内置的东西。

关于c# - 我可以将对象分配给实体对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16107179/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com