«Редактируя» сущность LINQ to SQL, могу ли я просто назначить один элемент другому? - PullRequest
0 голосов
/ 18 апреля 2011

Чтобы было ясно, скажем, у меня есть этот код:

void AlterItem(Orderable o) {  
    foreach(Orderable p in from Orderable n in dataContext.Orderables 
            where n.UID == o.UID 
            select n)  
    p = o;  
    dataContext.SubmitChanges();

Конечно, этот код не работает, потому что вы не можете назначить итерационную переменную, для меня это ясно. Есть ли способ лучше, чем переписать конкретные поля? Я пробовал Single (), но после присвоения одной переменной другой изменения не применяются.

Извините, если об этом спрашивали раньше. Я приложил все усилия, чтобы найти ответ, и не смог.

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Кажется, что есть путаница между переменными и объектами.При этом все, что происходит, это то, что переменная p ссылается на тот же объект, что и параметр o, а не на объект возврата из dataContext.Orderables.First().Когда вы отправляете изменения, на самом деле ничего не отправляется, потому что ни один из объектов базы данных не был изменен.Была изменена только ссылка:

void AlterItem(Orderable o)
{
   var p = dataContext.Orderables.First();
   p = o;
   dataContext.SubmitChanges();
}

Чтобы изменить объект, возвращаемый с dataContext.Orderables.First(), необходимо изменить его свойства.Вы также можете изменить объект с помощью переменной foreach следующим образом:

var p = dataContext.Orderables.First();
p.Property1 = o.Property1;
// etc...
dataContext.SubmitChanges();
1 голос
/ 18 апреля 2011

Нет, кроме проблемы с параметром foreach(), простой p = o; будет копировать только ссылку.

Лучше всего написать код для копирования свойств, возможно, с использованием AutoMapper.

...