更新实体而不将数据保存回数据库

时间:2011-04-08 18:41:35

标签: linq entity-framework

我创建了一个新的查询,如下所示

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();

我得到一个编译错误说明 属性或索引器'AnonymousType#1.Body'无法分配 - 它是只读的。

我检查了实体模型,没有任何内容只读取任何字段而不是任何字段。我一定错过了什么?

1 个答案:

答案 0 :(得分:2)

匿名类型封装了只读属性集 - 有关更多信息,请阅读here。编译器将匿名类型重写为构造函数注入,即:

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)

属性是只读的(public get,private / protected set,使用简单的比较)。如果要解决问题,而不是获取数据并创建匿名对象,请创建实际类型并在其上设置属性。