试图更新Linq2Sql表,但我的DataContext中的一些表将isReadOnly设置为true?

时间:2012-08-21 15:51:40

标签: c# linq-to-sql

我这张桌子上没有主键。我在某处读到了这件事。

出于某种原因,一个简单的

public bool UpdateServiceRequest(RequestedServiceAction action) {
    DataContext db = new DataContext();
    var service = db.tbl1.ToList().ElementAt(0)
    service.requestedAction = action.RequestedAction;
    service.requestedBy = action.RequestedBy;
    service.requestedDate = action.RequestedDate;
    service.SubmitChanges();
    return true;
}

不起作用。请求的Action,By和Date不会写入数据库。在进一步检查时,我注意到tbl1的isReadOnly属性设置为true。 所以我在创建上下文后尝试设置db.ObjectTrackingEnabled = false;,但isReadOnly仍然设置为true。

DataContext可能需要主键来跟踪“Element(0)”?

编辑:没有仔细查看MSDN:http://msdn.microsoft.com/en-us/library/bb339901.aspx

2 个答案:

答案 0 :(得分:0)

表没有任何固有的顺序。因此,获得“第一”元素几乎没有意义。您只能通过某种顺序获得第一个元素 。像这样:

db.tbl1.OrderBy(x => x.MyField).First()

答案 1 :(得分:0)

SQL Server需要主键来知道要在SubmitChanges上更新哪条记录。如果未指定密钥,则表将是只读的。此外,如果在select子句中预测出匿名类型,则结果属性也将是只读的。