无法更改由数据库计算或生成的成员

时间:2010-05-08 16:56:16

标签: c# linq-to-sql

我正在使用LinqToSql,就像你在主题上看到的一样。

我有一张桌子和一些柱子。有一个列显示记录状态。

0 : Not approved yet
1 : Approved
2 : Deleted

首先插入记录时,其值为0(默认值)。 当用户批准它时,它的值会变为1,但我收到此错误:

Value of member 'state' of an object of type 'News' changed.
A member that is computed or generated by the database cannot be changed.

这是测试代码:

DataClassesDataContext dc = new DataClassesDataContext();
var b = dc.GetTable<Ekler>().Where(p => p.ek_id == 1).FirstOrDefault();
if (b!=null)
{
    b.state= "1";
    dc.SubmitChanges();
}

我该怎么做才能解决这个问题?

3 个答案:

答案 0 :(得分:3)

您应该在设计器中查看数据上下文和/或数据库本身的“state”列的定义。基本上LINQ to SQL认为这类似于自动生成的值或者在数据库中计算的值 - 而不是应该手动编辑的值。如果它可以手动更新(听起来像),你需要告诉LINQ to SQL。

答案 1 :(得分:1)

在我的情况下,这是我的错,我无意间在DBML设计模式下为字段打勾了属性-“ 自动生成的值” =>

enter image description here

答案 2 :(得分:0)

当我们尝试更新数据库中的记录时,我遇到了同样的问题。我们可以插入,但是当我们尝试使用数据库中的一个计算列更新记录时,它会给出如下错误:“类型对象的成员值已更改。由数据库计算或生成的成员不能改变。“

解决方案:我们无法更新数据库中的该字段,但我们可以编辑引用它的计算列的引用字段。当我们更新引用字段时,计算列会自动更新表中的此字段。

如果您有任何进一步的询问,请告诉我。

谢谢..