domingo, 20 de septiembre de 2015

MVC Control with read/write actions and views, using Entity Framework (Solución con la base de datos)

     Recientemente comenzé a estudiar MVC y ahora que llegué al capítulos de la base datos Azure  y a probarla con la creación de Controles tuve muchos problemas como los describo a continuación.

Primero intenté  obtener una cuenta de Windows Azure, y Microsoft no me permitió en todo mi  día libre obtener acceso a la base de datos de prueba.


Cuando intenté creando la base de datos  "SistemaPruebas" en mi SQL Server 2014, voy a intento crear el  control  de el  siguiente modo

y Me lanza un error "mvc scaffolding does not support entity framework 6 or later" y supuse que era por la base de datos. Pero fui al internet e investigué y pense que como decian poniendo el  framework 5 se solucionaría el problema.
Pues lo instalé por la Package Manager Console  y me lanzaba un error de que no  reconocía el termino  "provider" y  tome como referencia un proyecto con una base de datos .mdf , me base en un proyecto  que si me funciona e hice estos cambios al web.config del root

<add name="SistemaPruebas" connectionString="Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\SistemaPruebas.mdf;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="ApplicationServices" connectionString="Data Source=(LocalDB)\v11.0;Integrated Security=True;AttachDBFilename=|DataDirectory|\aspnetdb.mdf" providerName="System.Data.SqlClient" />

Luego me lanzo este error


y fuí y comentarizé la siguiente línea en web.config

 <!--<providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>-->

No olviden hacer Build cada vez que hagan cambios al web.config

y vuelvan a intentar crear el control
finalmente el  resultado  es maravilloso
Crea el control con sus metodos

public class PhotoController : Controller
    {
        private PhotoSharingContext db = new PhotoSharingContext();

        //
        // GET: /Photo/

        public ActionResult Index()
        {
            return View(db.Photos.ToList());
        }

        //
        // GET: /Photo/Details/5

        public ActionResult Details(int id = 0)
        {
            Photo photo = db.Photos.Find(id);
            if (photo == null)
            {
                return HttpNotFound();
            }
            return View(photo);
        }

        //
        // GET: /Photo/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Photo/Create

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(Photo photo)
        {
            if (ModelState.IsValid)
            {
                db.Photos.Add(photo);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(photo);
        }

        //
        // GET: /Photo/Edit/5

        public ActionResult Edit(int id = 0)
        {
            Photo photo = db.Photos.Find(id);
            if (photo == null)
            {
                return HttpNotFound();
            }
            return View(photo);
        }

        //
        // POST: /Photo/Edit/5

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Photo photo)
        {
            if (ModelState.IsValid)
            {
                db.Entry(photo).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(photo);
        }

        //
        // GET: /Photo/Delete/5

        public ActionResult Delete(int id = 0)
        {
            Photo photo = db.Photos.Find(id);
            if (photo == null)
            {
                return HttpNotFound();
            }
            return View(photo);
        }

        //
        // POST: /Photo/Delete/5

        [HttpPost, ActionName("Delete")]
        [ValidateAntiForgeryToken]
        public ActionResult DeleteConfirmed(int id)
        {
            Photo photo = db.Photos.Find(id);
            db.Photos.Remove(photo);
            db.SaveChanges();
            return RedirectToAction("Index");
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }

y 5 vistas  de  la carpeta View/Photo
Create.cshtml
Delete.cshtml
Details.cshtml
Edit.cshtml
Index.cshtml

Todo el  código Html <.< todo  todo lo crea.

Esta fué mi reseña creando  controles con scaffoling y entityframework
Saludos


1 comentario:

  1. En otra versión de proyecto:
    Instalé el Framework 5 desde la consola
    Tengo la cadena en el Web.config del rooter



    Me salía un error que decía que los Modelos tenían errores de validación que no tenian un Key definido, yo tenía
    idFoto y lo cambié a FotoID,
    idComentario y lo cambié a ComentarioID,
    Build solution...
    No fue necesario agregar ni quitar líneas al WebConfig y se solucionó.



    ResponderBorrar