未来技術の光と影。
SIYOU’s Chronicle




■内容

 複数項目あるモデルの定義方法

 特に難しいことではないのかもしれないが、MVC5 のサンプルは、単純なテーブルが
 1個だけあるようなモデルでの解説が多いため、最初に結構、検索に時間を費やした。

■方法

 ※前項「1.MVC5 データベースファースト テーブル値関数の使用方法」にて、テーブル値関数
  から自動生成した「売上入金速報_Result」モデルを使用する。

●モデルの作成

 検索条件を設定する画面と、検索結果を表示する画面で共通に使用するモデルを定義する

1.「ソリューションエクスプローラ」
 ・「Models」フォルダ右クリック→追加→新しい項目

2.「新しい項目の追加
 ・左列で「Visual C#」を選択
 ・中央で「クラス」を選択
 ・「名前」を入力(なんでも良いが画面名.csにすると解りやすい)
 ・[追加]ボタンクリック

3.空のクラスが生成されるので、条件設定画面/結果表示画面用の項目及び、
 View の表示方法の切り替えなどに使用する項目を追加する。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace mobile.Models
{
public class 売上入金速報
{
public Decimal 社員番号 { get; set; }
public DateTime 当日 { get; set; }
public DateTime 累計開始日 { get; set; }
public DateTime 累計終了日 { get; set; }
public int グループ数 { get; set; }
// public IQueryable<売上入金速報_Result> 売上入金速報_Result { get; set; }
public 売上入金速報_Result[] 売上入金速報_Result { get; set; }
}
}


  ※最初、IQueryable型 にしていたが、後で重大な欠陥に気付き、単純な Array に変更した。
   →「12.LinQ の遅延実行に泣く」を参照
   ↑を踏まえた上でなら、「IQueryable」にするのが正しい気がする。

●コントローラの作成

 検索条件を設定する画面と、検索結果を表示する画面で共通に使用するコントローラを定義する

1.「ソリューションエクスプローラ」
 ・「Controllers」フォルダ右クリック→追加→コントローラ

2.「スキャフォールディングの追加」画面
 ・左列で「コントローラ」を選択
 ・中央で「MVC 5 コントローラ - 空」を選択
 ・[追加]ボタンクリック
 ・「コントローラ名」に名前(なんでも良いが画面名にすると解りやすい)と、"Controller"
  (デフォルト表示)を入力し、[追加]ボタンクリック

3.空のクラスが生成されるので、条件設定画面/結果表示画面用の処理を追加する

public class 売上入金速報Controller : Controller
{
private 業務DBEntities 業務DB = new 業務DBEntities();

[Authorize]
public ActionResult 条件設定(DateTime? 当日, DateTime? 累計開始日, DateTime? 累計終了日)
{
売上入金速報Model model = new 売上入金速報Model();
if (共通Controller.セッション情報取得(Session, model) == false)
return RedirectToAction("Login", "AccountController");
DateTime dt = DateTime.Today;
model.当日 = 当日 ?? dt;
model.累計開始日 = 累計開始日 ?? dt.AddDays((dt.Day - 1) * -1);
model.累計終了日 = 累計終了日 ??
new DateTime(dt.Year, dt.Month, DateTime.DaysInMonth(dt.Year, dt.Month));
return View(model);
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult 条件設定([Bind(Include = "当日,累計開始日,累計終了日")] 売上入金速報Model model)
{
if (!ModelState.IsValid) return View(model);
return RedirectToAction("結果表示", model);
}

[Authorize]
public ActionResult 結果表示([Bind(Include = "当日,累計開始日,累計終了日")] 売上入金速報Model model)
{
if (共通Controller.セッション情報取得(Session, model) == false)
return RedirectToAction("Login", "AccountController");
model.売上入金速報_Result = 業務DB.売上入金速報(
model.当日, model.累計開始日, model.累計終了日, model.社員番号).ToArray();
return View(model);
}
}


●ビューの作成

 検索条件を設定する画面と、検索結果を表示する画面を定義する

1.「ソリューションエクスプローラ」
 ・「View」フォルダの下の、コントローラ作成時に自動生成された画面名のフォルダ(中身は空)を右クリック
  →追加→View

2.「ビューの追加」ウィンドウ
 ・「ビュー名」なんでも良いが、画面が解りやすい
 ・「テンプレート」Epty(モデルなし)
 ・「モデルクラス」「データコンテキストクラス」空白
 ・「部分ビューとして作成」チェックOFF(デフォルト)
 ・「レイアウトページの使用」チェックON(デフォルト)
  ファイル名は空白のまま
 ・[追加]ボタンクリック

 ※この時点で何らかの設定を行って、モデル内の項目を全て表示するような雛形を生成して欲しいのだが、
  現時点でやり方不明。
 ※テンプレート覧で指定できる「List」が近いのだが、ユニークキー項目がないと使用できない。
 ※カスタム(と言うよりオリジナルの)T4テンプレートを作成すれば、なんとかなる気はするが。。。
  

3.空のビューが自動生成されるので、条件設定画面/結果表示画面用の処理を追加する

 ※ビューについては「3.MVC5 ビューでの数値項目右寄せカンマ編集」にて

■インデックス
MVC5データベースファーストでちゃっちゃとモバイルサイト
1.MVC5 データベースファースト テーブル値関数の使用方法
2.MVC5 複数項目あるモデルの定義
3.MVC5 ビューでの数値項目右寄せカンマ編集
4.MVC5 BootStrap でのアコーディオン
5.MVC5 データベースファースト ASP.NET Identity に嵌る
6.MVC5 テーブル値関数の再取り込み方法
7.MVC5 Session情報に配列を記録する方法
8.MVC5 AWS へのアップロード方法
9.SQL Server 読み込み専用ユーザの設定方法
10.MVC5 セッションタイムアウト後にLogin画面に戻す方法
11.自己認証による https化
12.LinQ の遅延実行に泣く


コメント ( 0 ) | Trackback ( 0 )




■内容

 MVC5データベースファーストにて、既存DBのテーブル値関数からモデルを自動生成する。
 テーブルやビューからは普通に出来るが、既存の「テーブル値関数」を利用する場合。

■解決方法

※スキャフォールディングによるビューの自動生成方法は、現時点で未確認。

1.あらかじめ「データ接続」を作成しておく
 ・「サーバーエクスプローラ」を開く
 ・「データ接続」を右クリック→「接続の追加」をクリック
 ・「データソース」デフォルト(Microsoft SQL Server (SqlClient))
 ・「サーバー名」を入力(または▼にて一覧から選択)
 ・「サーバーへのログオン」をそれなりに指定
 ・「データベースへの接続」▼にて使用するDBを選択
 ・[OK]ボタンクリック

2.「ソリューションエクスプローラ」
 ・「Models」フォルダ→右クリック→「追加」→「新しい項目」の順に選択

3.「新しい画面の追加」ウィンドウ
 ・左列で「データ」を選択
 ・中央のテンプレート一覧から「ADO.NET Entyty Data Model」を選択
 ・下部の名前覧を入力(DB名にすると解りやすい)
 ・[追加]ボタンクリック

4.「モデルコンテンツの選択」ウィンドウ
 ・「データベースから EF Dssiner」を選択し、[次へ]ボタンクリック

5.「データ接続の選択」ウィンドウ
 ・データ接続名はデフォルト(1.で設定した内容)
 ・問題ないようであれば「○はい、重要情報を接続文字列に含めます。」を選択
 ・「接続設定に名前を付けて Web.Config に保存」をチェック(デフォルトのまま)
 ・「接続設定名」→デフォルトのまま(DB名+'Entity' となる)
 ・[次へ]ボタンクリック

6.「データベースオブジェクトと設定の選択」ウィンドウ
 ・「ストアドプロシージャと関数」の左端△をクリックして開く
 ・「dbo」を開く
 ・一覧の中から該当の「テーブル値関数」をチェック
 ・「生成されたオブジェクト~」デフォルト(未チェック):チェックしても良い
 ・「モデルに外部キー列を含める」デフォルト(チェック)
 ・「選択したストアドプロシージャ~」デフォルト(チェック):必須
 ・[完了]ボタンクリック
 ・「セキュリティ警告」が表示されたら、内容を確認して[OK]ボタンクリック
 ・「ソリューションエクスプローラ」の「Models」フォルダの下に「○○.edmx」が生成される。
 ※テーブルなどの追加や、既存DBに変更が発生した場合の取り込み直しは、
  「6.MVC5 テーブル値関数の再取り込み方法」を参照
 ※もし「○○.edmx」を作り直したい場合には、「○○.edmx」を右クリック→削除
  した後で、「Web.Config」を開いて
   <connectionStrings>セクションの
    <add name="○○Entities" ~ の行を削除しないと、
  接続名に「○○Entity1」のように連番が振られる。

7.内容の確認
 ・「ソリューションエクスプローラ」の上部にある「すべてのファイルを表示」アイコンをクリック。
 ・「○○.edmx」→「○○.tt」の順に開くと、「○○○_Result.cs」のように、テーブル値関数の
  1レコード分のモデルクラスが自動生成されている。
 ・また「○○.edmx」→「○○.Context.tt」の順に開くと、「○○.Context.cs」として、
  テーブル値関数を呼んで、テーブル値を取得するファンクションが自動生成されている。
<pre>
 ◆元になるテーブル値関数

ALTER FUNCTION [dbo].[売上入金速報]
(
@当日 DATE,
@累計開始日 DATE,
@累計終了日 DATE,
@社員番号 NUMERIC(5, 0)
)
RETURNS @tbl TABLE
(
データ区分 INT, -- 0:店舗明細、1:グループ合計、2:総合計
グループ番号 NUMERIC( 3, 0),
店舗番号 NUMERIC( 5, 0),
店舗名 VARCHAR(20),
当日売上合計 NUMERIC(18, 0), -- 税抜
累計売上合計 NUMERIC(18, 0), -- 税抜
当日入金合計 NUMERIC(18, 0), -- 税込
累計入金合計 NUMERIC(18, 0), -- 税込
売上目標合計 NUMERIC(18, 0), -- 税抜
売上達成率 NUMERIC( 3, 0), -- 税抜比率
入金達成率 NUMERIC( 3, 0) -- 税抜比率
)
AS ...


 ◆自動生成された呼び出しファンクション

[DbFunction("業務DBEntities", "売上入金速報")]
public virtual IQueryable売上入金速報_Result> 売上入金速報(
NullableSystem.DateTime> 当日, NullableSystem.DateTime> 累計開始日,
NullableSystem.DateTime> 累計終了日, Nullabledecimal> 社員番号)
{
var 当日Parameter = 当日.HasValue ?
new ObjectParameter("当日", 当日) :
new ObjectParameter("当日", typeof(System.DateTime));
...

return ((IObjectContextAdapter)this).ObjectContext.CreateQuery売上入金速報_Result>(
"[業務DBEntities].[売上入金速報](@当日, @累計開始日, @累計終了日, @社員番号)",
当日Parameter, 累計開始日Parameter, 累計終了日Parameter, 社員番号Parameter);
}


 ◆自動生成されたモデル
public partial class 売上入金速報_Result
{
public Nullableint> データ区分 { get; set; }
public Nullabledecimal> グループ番号 { get; set; }
public Nullabledecimal> 店舗番号 { get; set; }
public string 店舗名 { get; set; }
public Nullabledecimal> 当日売上合計 { get; set; }
public Nullabledecimal> 累計売上合計 { get; set; }
public Nullabledecimal> 当日入金合計 { get; set; }
public Nullabledecimal> 累計入金合計 { get; set; }
public Nullabledecimal> 売上目標合計 { get; set; }
public Nullabledecimal> 売上達成率 { get; set; }
public Nullabledecimal> 入金達成率 { get; set; }
}


★→「2.MVC5 複数項目あるモデルの定義」へ続く

■インデックス
MVC5データベースファーストでちゃっちゃとモバイルサイト
1.MVC5 データベースファースト テーブル値関数の使用方法
2.MVC5 複数項目あるモデルの定義
3.MVC5 ビューでの数値項目右寄せカンマ編集
4.MVC5 BootStrap でのアコーディオン
5.MVC5 データベースファースト ASP.NET Identity に嵌る
6.MVC5 テーブル値関数の再取り込み方法
7.MVC5 Session情報に配列を記録する方法
8.MVC5 AWS へのアップロード方法
9.SQL Server 読み込み専用ユーザの設定方法
10.MVC5 セッションタイムアウト後にLogin画面に戻す方法
11.自己認証による https化
12.LinQ の遅延実行に泣く

コメント ( 0 ) | Trackback ( 0 )




■内容

 MVC5 で Session情報に配列を記録する方法
 C# を知っていれば簡単なことなのかもしれないが、検索するとなかなかヒットしない。

■解決方法

 下のサンプルではセッション関連の処理を共通化している。
 直接コーディングする場合には、共通処理中の SS の部分を Session に変えればOK。

1.セッション情報の保存

 ・「AccountController」内の「Login」ファンクション内で、ログインに成功した場合、
  UserName を「社員番号」として保存している。

  case SignInStatus.Success:
   // return RedirectToLocal(returnUrl);
   共通Controller.セッション情報保存(Session, model.UserName);
   return RedirectToAction("トップメニュー", "メニュー");
  ...

2.セッション情報の取得

 ・[Authorize]を宣言していても、認証完了後にセッションタイムアウトした場合には、
  コントローラに制御が飛んで来る。
 ・セッションタイムアウトしているか?の判定も兼ねている。

 [Authorize]
 public ActionResult 結果表示([Bind(Include = "店舗番号,累計開始日,累計終了日")] 売上ランキングModels model)
 {
  if (共通Controller.セッション情報取得(Session, model) == false)
   return RedirectToAction("Login", "AccountController");
  ...

 public class 売上ランキングModels
 {
  public decimal 社員番号 { get; set; }
  public int 店舗数 { get; set; }
  public List<decimal> Lst店舗番号;
  public List<string> Lst店舗名;
  ...

3.セッション情報の保存/取得共通処理

 ・保存時は、社員番号から閲覧可能な店舗の一覧を求めて、セッションに保存している。
 ・ただ取得時は、この方法だと取得時用のファンクションが画面ごとに必要となってしまう。

 public class 共通Controller : Controller
 {
  private const string Key社員番号 = "社員番号";
  private const string Key店舗数 = "店舗数";
  private const string Key店舗番号 = "店舗番号";
  private const string Key店舗名 = "店舗名";

  private static 業務DBEntities db = new 業務DBEntities();

  public static void セッション情報保存(HttpSessionStateBase SS, string UserId)
  {
   decimal 社員番号;
   if (decimal.TryParse(UserId, out 社員番号) == false) return;

   担当店舗一覧_Result[] 担当店舗一覧_Result;
   担当店舗一覧_Result = db.担当店舗一覧(社員番号).ToArray();

   List<decimal> Lst店舗番号 = new List<decimal>();
   List<string> Lst店舗名 = new List<string>();

   foreach (担当店舗一覧_Result item in 担当店舗一覧_Result)
   {
    Lst店舗番号.Add(item.店舗番号 ?? 0);
    Lst店舗名.Add(item.店舗名);
   }
   if (Lst店舗番号.Count > 1)
   {
    Lst店舗番号.Insert(0, 0);
    Lst店舗名.Insert(0, "【全店】");
   }

   SS[Key社員番号] = 社員番号;
   SS[Key店舗数] = Lst店舗番号.Count;
   SS[Key店舗番号] = Lst店舗番号;
   SS[Key店舗名] = Lst店舗名;
  }

  public static bool セッション情報取得(HttpSessionStateBase SS, 売上ランキングModels model)
  {
   if (SS.Count == 0) return false;
   model.担当者ID = (int)SS[Key社員番号];
   model.店舗数 = (int)SS[Key店舗数];
   if (model.店舗数 <= 1) return true;
   model.Lst店舗CD = (List<decimal>)SS[Key店舗CD];
   model.Lst店舗名 = (List<string>)SS[Key店舗名];
   return true;
  }

■インデックス
MVC5データベースファーストでちゃっちゃとモバイルサイト
1.MVC5 データベースファースト テーブル値関数の使用方法
2.MVC5 複数項目あるモデルの定義
3.MVC5 ビューでの数値項目右寄せカンマ編集
4.MVC5 BootStrap でのアコーディオン
5.MVC5 データベースファースト ASP.NET Identity に嵌る
6.MVC5 テーブル値関数の再取り込み方法
7.MVC5 Session情報に配列を記録する方法
8.MVC5 AWS へのアップロード方法
9.SQL Server 読み込み専用ユーザの設定方法
10.MVC5 セッションタイムアウト後にLogin画面に戻す方法
11.自己認証による https化
12.LinQ の遅延実行に泣く


コメント ( 0 ) | Trackback ( 0 )




■内容

SQL Server側 テーブル値関数が変更になっため、VSにて再取り込みを行ったが、「○○_Result1.cs」というように、クラス名及びソースファイル名の最後に連番が付与したものが追加となってしまう。

■解決方法

一度、既存定義(VSではアクセスできない隠し情報あり)を消去してから、取り込み直す。
※ひょっとすると、私の知らない正しい方法があるかもしれません。ご存知の方はコメント願います。


■ダメなやり方

●「○○_Result.cs」を直接修正して項目を追加しても、マッピングが直っていないので・・・

●通常の手順(と、思われる)

 ・「ソリューションエクスプローラ」から「○○Model.edmx」ファイルを選択
  →「エンティティデザイナー」が表示される。

 ・「エンティティデザイナー」上で右クリックし「データベースからモデルを更新」を選択
  →「更新ウィザード」が開く

 ・「更新」タブを選択し、該当の関数を選択して[完了]ボタンをクリック
  →「出力」ウィンドウに
   生成されたモデル ファイル: ○○Model.edmx。
   データベースからのメタデータの読み込みに要した時間: 00:00:05.4409359。
   モデルの生成に要した時間: 00:00:04.2694248。
   と、出力される。

 ・ここで一度[すべてを保存(Ctrl+Shift+S)](VS のソリューション全体を保存するコマンド。
  VS上部のフロッピーディスク(!)が2枚のアイコン)にて、ソリューション全体を保存する。

  ※「このファイルはソースエディター以外で更新それました。再度読み込みますか?」
   と、聞かれた場合には[すべてに適用]ボタンをクリック。

 ・「ソリューションエクスプローラ」から該当関数の「○○_Result.cs」を選択
  ★なんと、直っていない!!なぜ??

●一度削除してやり直し

 ・「ソリューションエクスプローラ」から「○○Model.edmx」ファイルを選択
  →「エンティティデザイナー」が表示される。

 ・「ソリューションエクスプローラ」下部のタブから「モデルブラウザー」タブを選択
  ※「モデルブラウザー」タブがない場合「エンティティデザイナー」を右クリックして「モデルブラウザー」を選択

 ・「○○Model」→「関数インポート」を開き該当関数を右クリックして「モデルから削除」を選択

 ・「○○Model.Store」→「ストアドプロシージャ/関数」を開き該当関数を右クリックして「モデルから削除」を選択

 ・「ソリューションエクスプローラ」タブをクリックして「ソリューションエクスプローラ」に戻る

 ・該当関数の「○○_Result.cs」を右クリックして「削除」を選択(実際の「○○_Result.cs」ファイルも削除される。
  →『'○○_Result.cs'は完全に削除されます。』が表示されたら[OK]ボタンクリック

 ★念のためここで一度[すべてを保存(Ctrl+Shift+S)]にてソリューション全体を保存する。
  →消したはずの「○○_Result.cs」ファイルが現れる。(実際の「○○_Result.cs」ファイルも自動生成される。

 ★試しにこの状態で「○○Model.edmx」の「エンティティデザイナー」上で右クリックし「データベースからモデルを更新」を選択
  →「追加」タブを選択。「ストアドプロシージャと関数」→「dbo」→該当関数にチェックを入れて[完了]ボタンをクリック
   ※「モデルブラウザー」で該当関数を消す前は、「追加」タブの一覧に該当関数は表示されない。
   ※逆に「モデルブラウザー」で該当関数を消すと、「更新」タブの一覧に該当関数は表示されない。
  →「出力」ウィンドウにモデルが生成された旨が出力される。

 ★元の「○○_Result.cs」が残ったまま、「○○_Result1.cs」が作成されている。
  ※上記で[すべてを保存(Ctrl+Shift+S)]を実施せずに「追加」処理をしても同じ結果となる。

 ★「○○_Result1.cs」を開くとクラス名も「○○_Result1」になっている。
  ※諦めて「○○_Result.cs」ファイルを削除して、プロジェクト内の「○○_Result」クラスを使用している箇所を
   全て「○○_Result1」に変更すれば、動くことは動く。
  ※「○○_Result.cs」ファイルを削除して、「○○_Result1.cs」を修正してクラス名を「○○_Result1」から「○○_Result」
   に修正しても動く。
  ※ただし「○○_Result1.cs」というファイル名を変更することは出来ないもよう。

●裏ワザ的な方法

 ・上記を参考にして「モデルブラウザー」から該当関数を削除(2箇所)する。

 ・一度[すべてを保存(Ctrl+Shift+S)]にてソリューション全体を保存する。

 ・「ソリューションエクスプローラ」から該当関数の「○○_Result.cs」を削除。
  ※「○○_Result1.cs」「○○_Result2.cs」・・・がある場合には全て削除する。
  ※この状態で[すべてを保存(Ctrl+Shift+S)]しても、「○○_Result.cs」ファイルは自動生成されない。

 ★「ソリューションエクスプローラ」から「○○Model.edmx」ファイルを【右】クリック
  →「ファイルを開くアプリケーションの選択」を選択し、「XML(テキスト)エディター」を選択し[OK]ボタンクリック
  ※「ドキュメント・・・は既に開いています。このドキュメントを閉じますか?」が表示されたら[はい]ボタンクリック

 ★『_Result』にて「現在のドキュメント」内を検索して、

 ★『<edmx:ConceptualModels>』セクション内の、該当関数の『<ComplexType Name="○○_Result">』セクションを削除
  ※セクション内の<Property ...>なども含めて、セクション全体を削除する。

 ★さらに下の方の『 <ComplexType Name="○○_Result">』セクション(○○_Result1...などがあれば全て)を削除

 ★「Models\○○Model.edmx の保存(Ctrl+S)」ボタン(フロッピーディスクが1枚のアイコン)にて該当ファイルのみ保存
  「○○Model.edmx」タブの[×]ボタンクリックにて、「XML(テキスト)エディター」を閉じる。

 ※念のため[すべてを保存(Ctrl+Shift+S)]。「○○_Result.cs」ファイルは自動生成されない。

 ★「ソリューションエクスプローラ」から「○○Model.edmx」ファイルを選択し直し、「エンティティデザイナー」を表示
 ・右クリックメニューから「データベースからモデルを更新」を選択
 ・「追加」タブ→「ストアドプロシージャと関数」→「dbo」→該当関数にチェックを入れて、[完了]ボタンクリック

 ★[すべてを保存(Ctrl+Shift+S)]ボタンクリック→該当関数の「○○_Result.cs」ファイルが自動生成される。
 ・「○○_Result.cs」ファイルを開くと、クラス名もちゃんと「○○_Result」になっている。

■インデックス
MVC5データベースファーストでちゃっちゃとモバイルサイト
1.MVC5 データベースファースト テーブル値関数の使用方法
2.MVC5 複数項目あるモデルの定義
3.MVC5 ビューでの数値項目右寄せカンマ編集
4.MVC5 BootStrap でのアコーディオン
5.MVC5 データベースファースト ASP.NET Identity に嵌る
6.MVC5 テーブル値関数の再取り込み方法
7.MVC5 Session情報に配列を記録する方法
8.MVC5 AWS へのアップロード方法
9.SQL Server 読み込み専用ユーザの設定方法
10.MVC5 セッションタイムアウト後にLogin画面に戻す方法
11.自己認証による https化
12.LinQ の遅延実行に泣く



コメント ( 0 ) | Trackback ( 0 )




業務でモバイルサイトを作ることになった。

クラサバ(クラウドではない)で作られた基幹システムの売上などのみ、リアルタイムでスマホで見たい。とのこと。

ログイン画面があり、メニューがあり、日付けや店舗の選択画面があり、結果表示画面がある。

モバイル版なので、その下に[<<12月29日][12月31日>>]などのボタンを付けてあげれば便利。かな?

データを抽出する部分は SQLServer上に テーブル値関数があるので、そのまま使える。

知っている人が作れば1週間程度だが、2000年頃に「メモ帳」と「MSペイント」で Webサイトを作って以降、Web系の開発はやっていない。

Web系の開発要員が全く空いていないので、自分で作ることになった。

どうやって作るのか?

モバイル版ということは、デザイン面がきっちりしていないと使い物にならないであろうから、「Webフォーム」ではだめ。

ちょって調べてみると「MVC5」で作れば良いらしい。

一応1月もらったのだが、次から次へと躓く。

ほぼ出来上がった時点で記事を書き直しているのだが、やはり、分かっていれば1週間で出来る。

実際には1月半ほどかかってしまった。

以下、開発中にハマってしたまった内容と解決方法を記録した。


■開発環境

●「VisualStudio2013+MVC5(Database First)」
・LINQ to Entities
・ASP.NEt Identity
・Razor
・BootStrap
・HTML5 + CSS3
・jQuery

●「MS SQLServer2012」
・テーブル値関数

●「AWS(Amazon Web Service)」


■内容

0.初めに
1.MVC5 データベースファースト テーブル値関数の使用方法
2.MVC5 複数項目あるモデルの定義
3.MVC5 ビューでの数値項目右寄せカンマ編集
4.MVC5 BootStrap でのアコーディオン
5.MVC5 データベースファースト ASP.NET Identity に嵌る
6.MVC5 テーブル値関数の再取り込み方法
7.MVC5 Session情報に配列を記録する方法
8.MVC5 AWS へのアップロード方法
9.SQL Server 読み込み専用ユーザの設定方法
10.MVC5 セッションタイムアウト後にLogin画面に戻す方法
11.自己認証による https化
12.LinQ の遅延実行に泣く


コメント ( 0 ) | Trackback ( 0 )