私はオーチャードの初心者で、初心者の質問があります。
既存の mvc アプリケーションを Orchard に変換していますが、実際に練習するために、contoso 大学のサンプル MVC アプリを Orchard に変換して基本を学習しようとしています。
そのためのモジュールを作成し、アプリにアクセスするためのメニュー要素を追加しました。また、Home\Index アクションからの出力を表示することもできたので、モジュールが正しく設定されていることがわかりました。
今、データベース クエリから生成されたテーブルを表示する Home\About アクションを追加しようとしています。
これにより、次のエラーが表示されます。
サーバー 'DEV\SQLEXPRESS' の MSDTC は使用できません。説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。
例外の詳細: System.Data.SqlClient.SqlException: サーバー 'DEV\SQLEXPRESS' の MSDTC は使用できません。
ソース エラー:
17行目: 18行目: 19行目: @foreach (モデル内の変数項目) { 20行目: 21行目:
ソース ファイル: c:\Users\dev1\Documents\My Web Sites\Orchard CMS\Modules\ContosoUniversity\Views\Home\About.cshtml 行: 19
ソース ファイル: c:\Users\dev1\Documents\My Web Sites\Orchard CMS\Modules\ContosoUniversity\Views\Home\About.cshtml 行: 19
さて、グーグルで調べたところ、これはアンビエントトランザクションを抑制する必要性と関係があることがわかりました。そこで、using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))をホーム コントローラーに追加します。
public class HomeController : Controller
{
private SchoolContext db = new SchoolContext();
[Themed]
public ActionResult Index()
{
ViewBag.Message = "Welcome to Contoso University!";
return View();
}
[Themed]
public ActionResult About()
{
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Suppress))
{
var query = "SELECT EnrollmentDate, COUNT(*) AS StudentCount "
+ "FROM Person "
+ "WHERE EnrollmentDate IS NOT NULL "
+ "GROUP BY EnrollmentDate";
var data = db.Database.SqlQuery(query);
return View(data);
}
}
しかし、それは役に立ちません。データアクセスコードをこれで囲む他の場所を読みましたが、エンティティフレームワークを使用しているため、データ接続を明示的に開いていないため、using ステートメントをどこに置くべきかわかりません。