Обновление сущности без сохранения данных обратно в базу данных - PullRequest
0 голосов
/ 08 апреля 2011

Я создал новый запрос, подобный следующему

var pressData = from press in dataContext.Releases
                                select new
                                {
                                    Heading = press.Heading,
                                    Description = press.Desc,
                                    DatePublished = press.PublishDate.ToString(),
                                    Body = press.BodyContent,
                                    ID=press.ReleaseID,
                                    CreatedBy=press.CreatedBy
                                };

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

var edit = pressData.Where(a => a.Heading == sectionPreview.HeadingContent && a.ID == sectionPreview.tionID).FirstOrDefault();
                            if (edit != null)
                            {
                               //WONT LET ME UPDATE THE Body VALUE
                                edit.Body = sectionPreview.SectionContent;

                            }

Цель приведенного выше кода состоит в том, чтобы посмотреть на pressData и заменить содержимое тела новым телом из переменной сеанса (здесь не показано), но НЕ сохранять его в БД. Я хочу, чтобы pressData отфильтровывался и обновлялся только в сущности. Поэтому, когда я связываю его с элементом управления, в этом случае он связывает данные, хранящиеся в моем сеансе.

 this.rptSections.DataSource = pressData;
                this.rptSections.DataBind();

Я получаю сообщение об ошибке complier Свойство или индексатор AnonymousType # 1.Body нельзя назначить - оно доступно только для чтения.

Я проверил модель сущности, и ничего не читается, только поля и ничего. Должно быть, я что-то упустил?

1 Ответ

2 голосов
/ 08 апреля 2011

Анонимные типы инкапсулируют коллекцию свойств только для чтения - для получения дополнительной информации читайте здесь .Компилятор переписывает анонимные типы как инъекции конструктора, то есть:

select new
{
    Heading = press.Heading,
    Description = press.Desc,
    DatePublished = press.PublishDate.ToString(),
    Body = press.BodyContent,
    ID=press.ReleaseID,
    CreatedBy=press.CreatedBy
};

Действительно переписывается как:

new Anonymous`1(press.Heading, press.Desc, press.PublishDate.ToString(), press.BodyContent, press.ReleaseID, press.CreatedBy)

И свойства доступны только для чтения (общедоступный, частный / защищенный набор,использовать простое сравнение).Если вы хотите решить свою проблему, вместо того, чтобы брать данные и создавать анонимный объект, создайте реальный тип и установите для него свойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...