Créer une table dans la Base de données à l'aide de Entity Framework
Je suis en train d'établir un lien de mon projet MVC avec une base de données à l'aide de Entity Framework, mais je ne peux pas comprendre comment stocker de nouveaux enregistrements à une base de données. Jusqu'à présent j'ai le code suivant:
//model
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using MvcApplication1.Controllers;
namespace MvcApplication1.Models
{
public class CarUser
{
public int ID { get; set; }
[DisplayName ("First Name")]
public string Fname { get; set; }
[DisplayName ("Surname")]
public string Sname { get; set; }
}
}
//controller
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using MvcApplication1.Models;
namespace MvcApplication1.Controllers
{
public class CarUserController : Controller
{
private FormDataContext db = new FormDataContext();
//
//GET: /CarUser/
public ActionResult Index()
{
return View(db.CarUsers.ToList());
}
//
//GET: /CarUser/Details/5
public ActionResult Details(int id = 0)
{
CarUser caruser = db.CarUsers.Find(id);
if (caruser == null)
{
return HttpNotFound();
}
return View(caruser);
}
//
//GET: /CarUser/Create
public ActionResult Create()
{
return View();
}
//
//POST: /CarUser/Create
[HttpPost]
public ActionResult Create(CarUser caruser)
{
if (ModelState.IsValid)
{
db.CarUsers.Add(caruser);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(caruser);
}
//
//GET: /CarUser/Edit/5
public ActionResult Edit(int id = 0)
{
CarUser caruser = db.CarUsers.Find(id);
if (caruser == null)
{
return HttpNotFound();
}
return View(caruser);
}
//
//POST: /CarUser/Edit/5
[HttpPost]
public ActionResult Edit(CarUser caruser)
{
if (ModelState.IsValid)
{
db.Entry(caruser).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(caruser);
}
//
//GET: /CarUser/Delete/5
public ActionResult Delete(int id = 0)
{
CarUser caruser = db.CarUsers.Find(id);
if (caruser == null)
{
return HttpNotFound();
}
return View(caruser);
}
//
//POST: /CarUser/Delete/5
[HttpPost, ActionName("Delete")]
public ActionResult DeleteConfirmed(int id)
{
CarUser caruser = db.CarUsers.Find(id);
db.CarUsers.Remove(caruser);
db.SaveChanges();
return RedirectToAction("Index");
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
//formdatacontext
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace MvcApplication1.Models
{
public class FormDataContext : DbContext
{
public DbSet<CarUser> CarUsers
{ get; set; }
}
}
//formdatainitialiser
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.IO;
namespace MvcApplication1.Models
{
public class FormDataInitializer : DropCreateDatabaseAlways<FormDataContext>
{
protected override void Seed(FormDataContext context)
{
base.Seed(context);
var CarUsers = new List<CarUser>
{
new CarUser {
ID = 1,
Fname = "Craig",
Sname = "Higginson",
}
};
CarUsers.ForEach(s => context.CarUsers.Add(s));
context.SaveChanges();
}
}
}
J'ai aussi la suite dans mon web.fichier de configuration
<connectionStrings>
<add name="FormDataContext"
connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=FormData.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
Cet ensemble construit très bien, et quand je naviguez vers /caruser je suis en mesure de créer de nouveaux enregistrements. Ces documents ne sont pas stockés dans ma base de données.
Dois-je créer la table dans la base de données de première ou devrait Entity Framework créer ce qui me concerne, si j'ai référencé correctement la base de données?
OriginalL'auteur user1894555 | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Si vous êtes en utilisant une Première approche de Code puis Entity Framework permettra de construire la table pour vous. Il semble que vous n'êtes pas en utilisant le Premier Code, de sorte que vous aurez créer la table dans la base de données. Je suppose que vous êtes à l'aide d'un Modèle de Données d'Entité.edmx)? Si oui, vous allez créer votre table dans la base de données, la mise à jour de votre modèle de données.edmx). Si vous n'avez pas encore créé votre .fichier edmx, vous avez besoin de le faire - le .fichier edmx va contenir l'ensemble de vos opérations CRUD.
Ce que je suis confus au sujet de qui est, j'imagine, votre code peut lever une erreur si la table n'existe pas (c'est à dire si la table représentée par votre modèle de données ne correspondent pas à une table dans la base de données, car il n'existe pas). Donc la question est, est-ce que votre table existe déjà? Si c'est le cas, l'étape à travers le code ligne par ligne, afin de savoir pourquoi vos dossiers ne sont pas enregistrées. Si elle n'existe pas, puis ajouter à la table via SQL Server Management Studio (ou similaire), puis ouvrez votre .fichier edmx, clic droit sur la page qui s'ouvre, cliquez sur "mettre à Jour le Modèle de base de données".
OriginalL'auteur Mike Marks
Vous pouvez trouver toutes besoin d'infos ici:
la création d'une entité-cadre-données-modèle-pour-un-asp-net-mvc-application
OriginalL'auteur d.lavysh
edmx
projet à votre solution existante qui est une maquette de la db et contient toutes les tables et SPs.DataAccessLayer.cs
.DataAccessLayer.cs
, ajouter une référence à votreedmx
projet.Utiliser ce code:
Et il semble aussi qu'il l'aide MVC, donc pourquoi aurait-il de la création d'un
DataAccessLayer.cs
classe à la requête de ses données, quand il devrait normalement le faire dans le code du contrôleur? Par ailleurs, la couche d'accès aux données est dans ce cas le Modèle de Données d'Entité code de derrière, de sorteDataAccessLayer.cs
, à mon avis, n'est pas un bon nom.requêtes de base de données ne devrait JAMAIS être fait dans le contrôleur.
OriginalL'auteur user1400915