小编mos*_*ash的帖子

调用SaveChanges()时排除属性更新

似乎有两种方法使用"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类的每个标量属性.

我的问题是:

  1. 我可以在POCO类上使用哪些属性告诉Entity Framework我从不希望该属性更新?例如,[NeverUpdate].我知道[NotMapped]属性,但这不是我需要的.
  2. 如果失败了,有什么方法可以使用上面的方法一(myDbContext.Entry(dog).State = EntityState.Modified;)并排除我不想更新的字段?

PS我知道另一种方法,不使用"附加",只需从数据库中获取一个新对象,更新所需的属性,然后保存.这就是我正在做的事情,但我很好奇是否有一种方法可以使用"附加",从而避免额外的数据库访问,但这样做的方式不像上面的方法二那么冗长.通过"获取一个新鲜的对象"我的意思是:

Dog dbDog = myDbContext.Dogs.FirstOrDefault(d => d.ID = dog.ID);
dbDog.Name = dog.Name;
myDbContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

asp.net-mvc entity-framework

6
推荐指数
1
解决办法
7278
查看次数

将映射转换为结构

好吧,标题有点误导。我所追求的如下:

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 …

go

5
推荐指数
1
解决办法
8442
查看次数

有没有办法逃避kwargs中的关键字

我有以下实例函数

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.

python

3
推荐指数
1
解决办法
333
查看次数

LLVM/LLDB的不确定行为(XCode 5.1.1)

请不要评论我应该如何通过引用等等.这段代码完全是实验性的.专注于非确定性行为.

我知道,这个标题听起来很持怀疑态度.

这是正在发生的事情:

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)

c++ xcode llvm

-2
推荐指数
1
解决办法
99
查看次数

标签 统计

asp.net-mvc ×1

c++ ×1

entity-framework ×1

go ×1

llvm ×1

python ×1

xcode ×1