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