Vorgehensweise beim Anlegen einer MVC Anwendung

Model

Der erste Schritt beim Erstellen ist das Anlegen eines Models welches die Datenstruktur vorgibt der Datenbank vorgibt.
Hierzu wird im Ordner Models eine neue Klasse angelegt. Dort werden dann Attribute und Methoden der Klasse definiert.

Class User
public class User
{
	// Attribute inklusive Setter / Getter
	public int Id {get; set; };
	public String Name {get; set; };
}

Controller

Im nächsten Schritt legen Sie in dem Ordner Controllers den zugehörigen Controller der Klasse User an. Die Benennung folgt folgenden
Richtlinien [Model]Controller. Der Controller beinhaltet die Methoden die für den CRUD Prozess (Create/Read/Update/Delete)
gebraucht werden und diverse andere Logik. Es ist zu Beachten das für Methoden wie Create zwei Definitionen benötigt werden.
Eine um den View zu laden und die andere um die entgegen genommenen Werte in die Datenbank zu schreiben.

Create
// GET: User/Create (Methode zum laden des Views)
public ActionResult Create()
{
	return View();
}

// POST: User/Create (Methode zum Schreiben in die Datenbank)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Id,Name")]User user)
{
	// Datenbankverbindung öffnen
	SQLiteConnection connection = DbConnect();
	using (var command = new SQLiteCommand(connection))
	{
		command.CommandText = string.Format(INSERT INTO db_User (Name,LastName) VALUES ('{0}','{1}')",user.Id,user.Name);
		command.ExecuteNonQuery();
	}
	// Datenbankverbindung trennen
	DbDisconnect(connection);
    return RedirectToAction("Index");
}
Read
// GET: User (Ausgabe aller Datensätze in der Datenbank)

public ActionResult Index()
{
	// Datenbankverbindung öffnen
	SQLiteConnection connection = DbConnect();
	// Read DB Content
	List<User> users = new List<User>();
	using (var command = new SQLiteCommand(connection))
	{
		command.CommandText = "SELECT * FROM db_User";
		using (SQLiteDataReader reader = command.ExecuteReader())
        {
        	while (reader.Read())
			{
				users.Add(new User
                {
                	Id = reader.GetInt32(0),
                 	FirstName = reader.GetString(1)
				});
			}
			reader.Close()
		}
	}
    DbDisconnect(connection);
	// Rückgabe der gelesenen Benutzer als Liste
    return View(users.ToList());
}
Update
// GET: User/Edit/5 (View laden und mit Informationen aus der Datenbank befüllen)

public ActionResult Edit(int? id)
{
	User user;
	//  Falls ID nicht vorhanden -> Error
	if (id == null)
    {
    	return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
	// Datenbankverbindung öffnen
    SQLiteConnection connection = DbConnect();
    using (var command = new SQLiteCommand(connection))
    {
		command.CommandText = string.Format("SELECT * FROM db_User WHERE Id = " + id);
    	using (SQLiteDataReader reader = command.ExecuteReader())
		{
			reader.Read();
            user = new User
            {
            	Id = reader.GetInt32(0),
            	Name = reader.GetString(1)
			};
		}
	}
	// Informationen über User an den View übergeben
	return View(user)
}

// POST: User/Edit/5 (Aktualisierte Daten in Datenbank schreiben)

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Id,Name")]User user)
{
	SQLiteConnection connection = DbConnect();
    using (var command = new SQLiteCommand(connection))
	{
		command.CommandText = string.Format("UPDATE db_User SET Name = '{1}' WHERE Id = {0}",
			user.Id,
			user.Name
		);
		command.ExecuteNonQuery();
	}
	return RedirectToAction("Index");
}

Delete
// GET: User/Delete/1 (View für Löschbestätigung laden)
public ActionResult Delete(int? id)
{
	User user;
	if (id == null)
	{
		return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
	}
	SQLiteConnection connection = DbConnect();
    using (var command = new SQLiteCommand(connection))
    {
    	command.CommandText = string.Format("SELECT * FROM db_User WHERE Id = " + id);
    	using (SQLiteDataReader reader = command.ExecuteReader())
		{
			reader.Read();
            user = new User
            {
            	Id = reader.GetInt32(0),
            	Name = reader.GetString(1)
			};
		}
	}
	return View(user);
}

// POST: User/Delete/1 (Methode zum löschen eines Datensatzes in der Datenbank)
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete([Bind(Include = "Id,Name")]User user)
{
	SQLiteConnection connection = DbConnect();
	using (var command = new SQLiteCommand(connection))
	{
		command.CommandText = string.Format("DELETE FROM db_User WHERE id = {0}", user.Id);
		command.ExecuteNonQuery();
	}
	return RedirectToAction("Index");
}

View

Der View beschreibt den für den Nutzer sichtbaren Teil unserer Anwendung. Es muss für jede aufgeführte Action im Controller ein
zugehöriger View existieren. Die Views legt man unter dem Ordner Views an. Es wird pro Controller ein Überordner erstellt um die Übersichtlichkeit zu erhöhen.
Nachfolgend ein Beispiel wie ein Index View aussehen könnte.

View Index
@model IEnumerable<RecordBook.Models.User>
@{
    ViewBag.Title = "Index";
}
<h2>@Resources.Resource.Title_Index_User</h2>
<p>
    @Html.ActionLink(Resources.Resource.Btn_Create, "Create")
</p>
<table class="table">
    <tr>
        <th>
            @Resources.Resource.Id
        </th>
        <th>
            @Resources.Resource.Name
        </th>
	</tr>
@foreach (var item in Model)
{
	<tr>
    	<td>
        	@Html.DisplayFor(modelItem => item.Id)
        </td>
        <td>
        	@Html.DisplayFor(modelItem => item.Name)
        </td>
	</tr>
}
</table>