3

私はライブで.netシステムを作成しているところです。LINQとMVCを使用しています。私はライブデータベースを作成する必要があり、これがスムーズに実行されることを望んでいましたが、そうではありませんでした。

新しいSQLサーバー-MicrosoftWindowsNT 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."

私はこのエラーをグーグルで検索し、人々が「MSDTCサービス」と関係があると信じていることを発見しましたが、これはサービスにチェックされているようです。SQL Server Managementでデータベースにログインしましたが、このユーザーは追加/削除できます。

一例:

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;
    }
}

*これは開発サーバーを使用するときに機能したことに注意してください。Microsoft Windows NT 5.2(3790)/ 10.0.1600.22

コントローラ

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);
}

私が何が欠けているのか本当にわかりません。

助けてくれてありがとう。

クレア :-)

4

1 に答える 1

5

分散トランザクションをトリガーする理由がわかりましたか? これはあなたが調査する必要があるものです。通常の原因は、単一の TransactionScope からの複数の ADO.Net 接続です。ADO.NET と System.TransactionsおよびADO.NET と LINQ to SQL を参照してください。トランザクション スコープで単一の接続 (つまり、LINQ2SQL コンテキスト) を使用していることを確認してください。とにかく、HTTP 呼び出しごとに複数使用する必要はありません。

于 2012-06-11T13:19:00.813 に答える