似乎有两种方法使用"attach"方法更新断开连接的Entity Framework实体.
方法一是简单地将断开连接的实体的状态设置为已修改:
myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).State = EntityState.Modified;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
这将保存"dog"对象上的所有字段.但是你说你是在一个mvc网页上做的,你只允许编辑Dog.Name,页面上唯一的Dog属性是Name.然后可以做方法二:
myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).Property(o => o.Name).CurrentValue = dog.Name;
myDbContext.Entry(dog).Property(o => o.Name).IsModified = true;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
当有许多属性需要更新时,方法二可能会变得非常冗长.这促使我尝试方法三,在我不想改变的属性上设置IsModified = false.这不起作用,抛出运行时错误"不支持修改属性的设置IsModified为false":
myDbContext.Dogs.Attach(dog);
myDbContext.Entry(dog).State = EntityState.Modified;
myDbContext.Entry(dog).Property(o => o.Owner).IsModified = false;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
我更喜欢在任何地方使用Method One,但是在很多情况下我的asp.net mvc视图不包含Dog类的每个标量属性.
我的问题是:
PS我知道另一种方法,不使用"附加",只需从数据库中获取一个新对象,更新所需的属性,然后保存.这就是我正在做的事情,但我很好奇是否有一种方法可以使用"附加",从而避免额外的数据库访问,但这样做的方式不像上面的方法二那么冗长.通过"获取一个新鲜的对象"我的意思是:
Dog dbDog = myDbContext.Dogs.FirstOrDefault(d => d.ID = dog.ID);
dbDog.Name = dog.Name;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud) 好吧,标题有点误导。我所追求的如下:
type MyStruct struct {
id int
name string
age int
}
func CreateFromMap(m map[string]interface{}) (MyStruct, error) {
var (
id int
name string
age int
ok bool
)
err := errors.New("Error!")
id, ok = m["id"].(int)
if !ok {
return nil, err
}
name, ok = m["name"].(string)
if !ok {
return nil, err
}
age, ok = m["age"].(int)
if !ok {
return nil, err
}
return MyStruct{id, name, age}, nil
}
Run Code Online (Sandbox Code Playgroud)
不要问:为什么我不使用CreateFromMap(int, string, int)
. 那个物体来自其他地方,不在我的控制范围内。
将映射中的每个键值对映射到结构体属性已经很无聊了。但是ok …
我有以下实例函数
class MyClass:
def __init__(self):
self.request = dict()
def my_func(self, **kwargs):
self.request['arguments'] = kwargs
Run Code Online (Sandbox Code Playgroud)
我希望用它如下:
obj = MyClass()
obj.my_func(global = True)
Run Code Online (Sandbox Code Playgroud)
如您所见,我希望使用Python关键字作为关键值kwargs
.我知道这是一个语法错误.我想知道是否有办法逃脱它,这样可以产生一个kwargs
有价值的东西{'global':True}
.
我在官方文档中找不到与此相关的任何内容.因为kwargs
键是类型的,所以我期待一种逃脱它们的方法string
.
请不要评论我应该如何通过引用等等.这段代码完全是实验性的.专注于非确定性行为.
我知道,这个标题听起来很持怀疑态度.
这是正在发生的事情:
vector<int> find_permutation2(vector<int> v) {
int k = (int)v.size() - 1;
while(k >= 0 && v[k] >= v[k + 1])
k--;
if(k == -1) return vector<int>();
int i;
for(i = (int)v.size() - 1; i > k; i--) {
if(v[i] > v[k])
break;
}
vector<int> r(v);
std::swap(r[k], r[i]);
std::reverse(r.begin() + k + 1, r.end());
return r;
}
int main() {
vector<int> foo = {2,3,4,1,0};
vector<int> bar = find_permutation2(foo);
default_random_engine g;
uniform_int_distribution<int> dist(5,10);
for(int i = 0; i < 10000; …
Run Code Online (Sandbox Code Playgroud)