```csharp
[httpstatus](https://www.webfx.com/web-development/glossary/http-status-codes/)
//=========================
//model
public class Opera
{
public int OperaID { get; set; }
public string Title { get; set; }
public int Year { get; set; }
public string Composer { get; set; }
}
//operacontroller.cs
public ActionResult Index()
{
Opera opera = new Opera
{
OperaID = 1,
Title = "尤利迪西",
Year = 1600,
Composer = "佩里"
};
return View(opera);
}
// opera/index.cshtml
@model Mod02.Models.Opera
<ul>
<li>@Model.OperaID</li>
<li>@Model.Title</li>
<li>@Model.Year</li>
<li>@Model.Composer</li>
</ul>
//============================
C# Type
Value
int non-nullable
int? nullable
Reference
string nullable
Expression<Func<Opera,TValue>>
--> Lambda Expression
m=>m.Title
//Model
public class Opera
{
[DisplayName("編號")]
public int OperaID { get; set; }
[Required(ErrorMessage = "歌劇名稱不可以為空白")]
[StringLength(200)]
[DisplayName("歌劇名稱")]
public string Title { get; set; }
[DisplayName("年代")]
public int Year { get; set; }
[Required]
[DisplayName("作者")]
public string Composer { get; set; }
}
//View
<ul>
<li>@Html.DisplayName("operaid"): @Html.Display("operaid")</li>
<li>@Html.DisplayNameFor(m=>m.Title): @Html.DisplayFor(m=>m.Title) </li>
<li>@Html.DisplayNameFor(m=>m.Year): @Html.DisplayFor(m=>m.Year) </li>
<li>@Html.DisplayNameFor(m=>m.Composer): @Html.DisplayFor(m=>m.Composer) </li>
</ul>
//===================================
// CheckValidYear.cs
public class CheckValidYear:ValidationAttribute
{
public CheckValidYear()
{
ErrorMessage = "The earliest opera is Daphne, 1598, by Corsi, Peri, and Rinuccini";
}
public override bool IsValid(object value)
{
if (value == null) return true;
int year = (int) value;
return year>1597;
}
}
// Opera.cs
[DisplayName("年代")]
[CheckValidYear]
public int? Year { get; set; }
//===============================
// home/index.cshtml
@model Mod02.Models.Opera
<form action="~/Opera">
@Html.EditorForModel()
<input type="submit" />
</form>
// operacontroller.cs
public ActionResult Index(int operaid, string title)
{
Opera opera = new Opera
{
OperaID = operaid,
Title = title,
Year = 1600,
Composer = "佩里"
};
return View(opera);
}
public ActionResult Index(Opera opera) //Model Binding
{
return View(opera);
}
public bool Index(Opera opera) //Model Validation
{
return ModelState.IsValid;
}
public ActionResult Index(Opera opera)
{
if (ModelState.IsValid)
{
return View(opera);
}
else
{
return View("~/views/home/index.cshtml",opera);
}
}
//=======================
// operacontext.cs
public class OperaContext:DbContext
{
public DbSet<Opera> Operas { get; set; }
}
// operacontroller.cs
public class OperaController : Controller
{
OperaContext context=new OperaContext();
public ActionResult Index()
{
return View(context.Operas.ToList());
}
}
// opera/index.cshtml
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Opera List</title>
</head>
<body>
<div>
<h1>Opera List</h1>
</div>
</body>
</html>
//=================================
// web.config
<connectionStrings>
<add name="OperaContext"
connectionString="server=(localdb)\mssqllocaldb;database=operadb;trusted_connection=true;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
// OperasInitializer.cs
public class OperasInitializer : DropCreateDatabaseAlways<OperaContext>
{
protected override void Seed(OperaContext context)
{
var operas = new List<Opera>
{
new Opera {
Title = "Cosi Fan Tutte",
Year = 1790,
Composer = "Wolfgang Amadeus Mozart",
},
new Opera {
Title = "Rigoletto",
Year = 1851,
Composer = "Giuseppe Verdi",
},
new Opera {
Title = "Nixon in China",
Year = 1987,
Composer = "John Adams"
},
new Opera {
Title = "Wozzeck",
Year = 1922,
Composer = "Alban Berg"
}
};
operas.ForEach(o => context.Operas.Add(o));
context.SaveChanges();
}
}
//global.asax.cs
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
Database.SetInitializer(new OperasInitializer());
}
//==================================
// opera/index.cshtml
@model IEnumerable<Mod02.Models.Opera>
<table border="1">
<thead>
<tr>
<th>@Html.DisplayNameFor(m => m.Title)</th>
<th>@Html.DisplayNameFor(m => m.Year)</th>
<th>@Html.DisplayNameFor(m => m.Composer)</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>@Html.DisplayFor(m => item.Title)</td>
<td>@Html.DisplayFor(m => item.Year)</td>
<td>@Html.DisplayFor(m => item.Composer)</td>
</tr>
}
</tbody>
</table>
//=================================
1. web.config
修改connectionstring database=operadb2
2. 對OperasInitializer.cs點選[exclude from project]
3. global.asax.cs
//Database.SetInitializer(new OperasInitializer());
4. build
//=======================================
Code First Migrations
tools->nuget package manager->package manager console
pm>enable-migrations –EnableAutomaticMigration:$true
//configruation class
protected override void Seed(Mod02.DAL.OperaContext context)
{
// This method will be called after migrating to the latest version.
// You can use the DbSet<T>.AddOrUpdate() helper extension method
// to avoid creating duplicate seed data.
context.Operas.AddOrUpdate(o => o.Title, new Opera
{
Title = "Cosi Fan Tutte",
Year = 1790,
Composer = "Wolfgang Amadeus Mozart",
},
new Opera
{
Title = "Rigoletto",
Year = 1851,
Composer = "Giuseppe Verdi",
},
new Opera
{
Title = "Nixon in China",
Year = 1987,
Composer = "John Adams"
},
new Opera
{
Title = "Wozzeck",
Year = 1922,
Composer = "Alban Berg"
});
}
pm>update-database -verbose
```