1

ASP.NET 4.0 C#,Linq to SQL:我有一个要求,一旦创建了新行,我需要将标识值写回同一行中的另一个字段。

我试过了,但没有用(未找到或更改行):

//newRow created and fields populated here
dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
newRow.Field = newRow.PriKey;
dc.SubmitChanges();

我还尝试将该行读入一个新变量并更新但同样的错误:

//newRow created and fields populated here
dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
row2 = (from r in dc.Table where r.PriKey = newRow.PriKey select r).FirstOrDefault();
row2.Field = newRow.PriKey;
dc.SubmitChanges();

我想我可以通过创建和执行我自己的 SQL 命令轻松地做到这一点,但有没有更简单的方法来做到这一点?

编辑:这包含在交易中的事实是否有所作为?

using (CMSDataContext dc = new CMSDataContext(Config.ConnString))
{
    dc.Connection.Open();
    dc.Transaction = dc.Connection.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted);
4

2 回答 2

1

这似乎不是 LINQ2SQL 的限制,在 LINQPad 中运行以下内容似乎可以正常工作。您是否尝试过在调试器中单步执行您的代码?或者您可以发布您的真实代码以检查其他问题吗?

create table data
(
    ID int not null identity primary key,
    Value varchar(16) not null,
    PKStore int null
)

var newRow = new Data{Value = "MyVal"};
Data.InsertOnSubmit(newRow);
SubmitChanges();

newRow.PKStore = newRow.ID;
SubmitChanges();

Data.Dump(); //LINQPad Method

输出

在此处输入图像描述

于 2012-04-10T00:42:43.967 回答
-1

尝试排序并从列表中选择第一行

dc.Table.InsertOnSubmit(newRow);
dc.SubmitChanges();
row2 = (from r in dc.Table  order by r.PriKey desecnding select r).FirstOrDefault();
row2.Field = row2.PriKey;
dc.SubmitChanges();
于 2012-04-10T00:23:32.843 回答