ASP.NET LINQ SQL 数据库

标签 asp.net sql sql-server linq

我正在制作一个 .net 系统。我正在使用 LINQ 和 MVC。我必须创建实时数据库并希望它能够顺利运行,但事实并非如此。

新的 SQL SERVER - Microsoft Windows NT 5.0 (2195)/8.00.760

我创建了一个可以添加/编辑/删除的管理员用户。基本上,如果我尝试添加 (.InsertOnSubmit) 或删除 (.DeleteOnSubmit) 任何行,但在编辑时不会收到以下错误。

"Network access for Distributed Transaction Manager (MSDTC) has been disabled. Please enable DTC for network access in the security configuration for MSDTC using the Component Services Administrative tool."

我在 Google 上搜索了此错误,发现人们认为它与“MSDTC 服务”有关,但该服务似乎已勾选此错误。我已通过SQL Server管理登录数据库,该用户可以添加/删除。

一个例子:

Controller
if (_service.AddAccess(access)) return RedirectToAction("Access");

public Repository()
{
    _db = new DataClassDataContext(ConfigurationManager.ConnectionStrings["RegistrarsServices"].ConnectionString);
}

public void Save()
{
    _db.SubmitChanges();
}

public bool AddAccess(Access access)
{
    try
    {
        using (var scope = new TransactionScope())
        {
            _db.Accesses.InsertOnSubmit(access);
            Save();

            scope.Complete();
        }
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

*请注意,这在使用开发服务器时确实有效。微软Windows NT 5.2(3790)/10.0.1600.22

Controller

private readonly ServiceAdministration _service = new ServiceAdministration();

public ActionResult AddAccess()
{
    return View(new EmailViewModel());
}

[HttpPost]
public ActionResult AddAccess(EmailViewModel emailViewModel)
{
    if (emailViewModel.Button == "Back") return RedirectToAction("Access");

    if (!ModelState.IsValid) return View(emailViewModel);

    Access access = new Access();
    access.emailAddress = emailViewModel.emailAddress;

    if (_service.AddAccess(access)) return RedirectToAction("Access");

    emailViewModel.errorMessage = "An error has occurred whilst trying to grant access. Please try again later.";
    return View(emailViewModel);
}

服务

readonly Repository _repository = new Repository();

public bool AddAccess(Access access)
{
    return _repository.AddAccess(access);
}

我真的不知道我错过了什么。

预先感谢您的帮助。

克莱尔:-)

最佳答案

您知道为什么要触发分布式事务吗?这是你需要调查的。通常的罪魁祸首是来自单个 TransactionScope 的多个 ADO.Net 连接。请参阅ADO.NET and System.TransactionsADO.NET and LINQ to SQL 。确保在事务范围内使用单个连接(即 LINQ2SQL 上下文)。无论如何,每个 HTTP 调用不必使用多个。

关于ASP.NET LINQ SQL 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10980747/

相关文章:

c# - 如何使用 Paypal NVP API 为第三方客户创建加密的 PayNow 按钮 "on the fly"?

javascript - Node js异步 waterfall 未按顺序传递变量

sql - 我应该在 T-SQL 中使用 != 或 <> 表示不等于吗?

asp.net - 网站项目编译的 dll 在哪里

c# - JSON 对象在使用 JsonResult 返回时被序列化为空括号

php - 将 PHP 变量分配给 SQL 结果

MySQL - 在存储过程中对 IF 语句条件使用 SELECT

sql-server - 多个连接约束的评估顺序

sql - 根据交易日期计算客户的行程

c# - 请求之间的 HttpContext.Current.Items 是线程安全的吗?