【发布时间】:2009-04-15 20:36:32
【问题描述】:
我有一个 WCF 服务,用于向数据库添加投标,即 MS SQL Server 2005。WCF 使用 LINQ-to-SQL。
每个投标可以有很多文件和很多项目。客户可以在每次服务调用中添加一个对象。也就是说,做这样的事情:
TendersServiceClient service = new TenderServiceClient();
service.BeginTransaction();
// Adding a new tender
service.AddTender(TenderDTO tenderInfo);
// Adding tender's documents
foreach (DocumentDTO documentInfo in documents)
service.AddTenderDocument(tenderInfo.TenderID, documentInfo);
// Adding tender's items
foreach (ItemDTO itemInfo in items)
service.AddTenderItem(tenderInfo.TenderID, itemInfo);
service.CommitTransaction();
注意 BeginTransaction() 和 CommitTransaction()。也就是说,上述所有过程要么完全成功,要么完全回滚。例如,如果其中一项无法插入,则整个标书不应该存在...
所以问题是我如何实现这种交易。当然,问题在于 WCF 是无状态的。因此为每个服务调用创建新的 DataContext。如果我使用静态 DataContext 代替,那么我将能够使用其内置的事务功能,但是我如何处理其他可以尝试同时添加另一个投标的客户(当然,他们必须是,在此交易之外)?
所以请帮助我使用某种设计模式来实现这一点。我可以随意更改服务和客户端的代码,所以请随意提出您的建议 =)
【问题讨论】:
标签: wcf web-services linq-to-sql