【发布时间】:2015-06-30 18:17:00
【问题描述】:
我正在使用带有 linqtosql 的 Transactionscope。我有以下代码:
public bool Save(int Id, List<Student> students, List<Subject> subjects)
{
var isDataSaved = false;
using (TransactionScope scope = new TransactionScope())
{
try
{
// Save the students
SaveStudents(students);
// Save the subjects
SaveSubjects(subjects);
scope.Complete();
isDataSaved = true;
}
catch (Exception ex)
{
throw ex;
}
return isDataSaved;
}
}
在这两种方法中,我都使用了两个表:学生,科目存在于同一数据库中。使用下面类中提到的构造函数设置 datacontext 对象依赖项:
public class StudentsRepository:IStudentsRepository
{
public StudentsRepository()
{
_dataContext = new SchoollDetailsDataContext(connectionString);
}
}
SaveStudents 和 SaveSubjects 方法都使用相同的 datacontext 对象。
我遇到了一个异常:服务器 'servername' 上的 MSDTC 不可用。
根据我的初步分析,当数据库操作在我的本地数据库中而另一个将在远程数据库中时,会发生这种错误。
谁能帮我知道我在这里遗漏了什么?
【问题讨论】:
-
“使用相同的数据上下文对象”我对此表示怀疑。这里打开了两个连接。这与本地/远程无关。发布完整的异常 ToString。您遗漏了信息。
-
isDataSaved 应该做什么?此方法将始终返回 true。删除变量和捕获。
-
第一次在方法中使用相同的_dataContext:SaveStudents,然后转移到SaveSubjects。 isDataSaved 变量值用于跟踪正在保存的数据。
-
发布异常 ToString 输出。
标签: linq-to-sql asp.net-web-api2 transactionscope