Entity Framework - обновить строку в таблице - PullRequest
2 голосов
/ 22 августа 2011

Я новичок в Entity Framework, и у меня есть вопрос об обновлении данных в таблице.

В настоящее время я использую следующий подход для обновления данных и ищу лучший способ, если кто-то может мне помочь.

Допустим, я обновляю таблицу "Категория", и в ней всего 3 поля (id, name, archived)

private void UpdateCategory(category entity)
{
    category  catObj = context.category.find(e=> e.id == id);
    catObj.name = entity.name;
    catObj.archived = entity.archived;
    context.savechanges();
}

У меня вопрос, если в таблице категорий I есть 50 полей?придется назначать каждое поле индивидуально.Разве я не могу сделать что-то подобное .. catObj = entity;

Ответы [ 3 ]

1 голос
/ 22 августа 2011

Чтобы сделать это автоматически, вы, вероятно, можете использовать такой проект, как AutoMapper .

Однако вы должны быть осторожны с этим, потому что, если свойство не имеет значения для передаваемой категории, оно будет перезаписывать свойство старой категории без значения, даже если оно не предназначено,Чтобы обойти это, вам нужно будет использовать конфигурации автоматического преобразователя для правильного выполнения проекции, именно так, как вы хотите.

0 голосов
/ 22 августа 2011

Я не уверен, что AutoMapper хорош для ваших целей.Также вам может понадобиться указать сопоставления в любом случае.

Для того, что вы описали, у меня обычно есть метод, например void CopyEntityFrom(Category Source), в каждой сущности, а в методе у меня есть операторы сопоставления (например, this.name = entity.name;) Ноделайте это не вручную, а генерируйте их, используя MVCScaffolding или другие методы генерации кода.

0 голосов
/ 22 августа 2011

Вы можете изменить свойства всех членов коллекции с помощью одной операции LINQ:

collection.Select(c => {c.PropertyToSet = value; return c;}).ToList();

Итак:

private void UpdateCategory(category entity)
{
    category  catObj = context.category.find(e=> e.id == id);
    catObj.Select(c=> {c.name = entity.name; c.archived = entity.archived; return c;}).ToList();
    context.savechanges();
}
...