VS2012 Update3 でMVC4+CodeFirstを使った時のメモ

Code FirstでDBを自動的に変更するには

下記のいずれかを使うべし

【Global.asax.cs】
//DBを自動的に再作成 開発初期時用 下記のどっちかを使う
 Database.SetInitializer(new DropCreateDatabaseIfModelChanges<MyDbContext>());
// Database.SetInitializer(new DropCreateDatabaseAlways<MyDbContext>());

SQL CE4を使うとコントローラ自動作成に失敗する。

connectionStringのProviderNameを一時的にproviderName=”System.Data.SqlClient”に変更して自動作成させるべし。実行時はもとに戻す。

【web.config】
<add name="DefaultConnection" 
connectionString="Data Source=|DataDirectory|\UsersDB.sdf" 
providerName="System.Data.SqlServerCe.4.0"/>

Roleを実装するには

SimpleRoleProviderを使うべし

【web.config】 
<system.web> 
・・・うんぬんかんぬん・・・・・   
<roleManager enabled="true" defaultProvider="SimpleRoleProvider">
      <providers>
        <clear/>
        <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData"/>
      </providers>
    </roleManager>
    <membership defaultProvider="SimpleMembershipProvider">
      <providers>
        <clear/>
        <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" />
      </providers>
    </membership>

</system.web>

System.Web.Security.Rolesクラス(static)から操作できる。

[AcceptVerbs(HttpVerbs.Get)]
 public JsonResult GetUsersInRole(string Role) {
   string[] users = Roles.GetUsersInRole(Role);
   return Json(users,JsonRequestBehavior.AllowGet);
 }

ページのキャッシュをOFFにしたい時は

OutputCacheAttributeを使うべし

[OutputCacheAttribute(VaryByParam = "*", Duration = 0, NoStore = true)] //キャシュoff
public class RoleController : Controller
{
・・・・うんぬんかんぬん・・・
}

自動で作られるCreate用のviewにて、名称と入力枠を左右に並べるには

site.cssに.editor-label、.editor-fieldを定義すべし

【site.csss】※微調整は自分でしてね

input, textarea {
    border: 1px solid #e2e2e2;
    background: #fff;
    color: #333;
    font-size: 1.2em;
    /*margin: 5px 0 6px 0;* ←コメントアウト
    padding: 2px;
    width: 300px;
}

※新規追加
.editor-label {
     border-width: 1px;
     clear: both;
     float: left;
     padding: 2px;
     width: 150px;
     margin: 0 5px 0 0;
     background-color: lightgray; 
}

※新規追加
.editor-field {
     width: auto;
     overflow: auto; 
}

ROLEによるアクセス制限をかけるには

[Authorize(Roles=”ロール名”)]を使うべし

 [Authorize(Roles="Admins")]
 public class RoleController : Controller
{
・・・・うんぬんかんぬん・・・
}