我有一個Project Table,一個涉衆表和一個關聯表(它將ProjectID和StakeholderID作爲外鍵)。如何鎖定.NET事務中的相關行
我想刪除一個Project,但必須先刪除關聯表中的所有項目行。
這裏是方法。 ProjectRow是使用DataSet Designer創建的強類型DataRow。
public void RemoveProject(ProjectRow project)
{
try
{
var associations = from a in ds.Association.AsEnumerable()
where a.Project == project.ProjID
select a;
foreach (DataRow assoc in associations)
{
assoc.Delete();
}
project.Delete();
using (TransactionScope scope = new TransactionScope())
{
assocTableAdapter.Update(ds.Association);
System.Threading.Thread.Sleep(40000); // to test the transaction.
projTableAdapter.Update(ds.Project);
scope.Complete();
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
這種方法確實達到所需要的效果(停止在交易過程中被添加到已刪除項目協會),但它似乎把讀和所有的表,所以我甚至不能從項目表讀寫鎖在睡眠期間。
我希望能夠在交易期間將其他項目/利益相關者對添加到關聯表中。我如何實現這一目標? 乾杯。
如果您可以更改表關聯,則可能需要查看「刪除瀑布」。這不是一個代碼解決方案,但它可能是你想要考慮的。 – Tipx
http://blogs.msdn.com/b/dbrowne/archive/2010/06/03/using-new-transactionscope-considered-harmful.aspx –