ApplyPropertyChanges不包含使用MVC的定义

时间:2014-02-18 20:27:50

标签: c# asp.net-mvc visual-studio-2012

当我尝试修改MVC应用程序中的Delete方法时出现此错误。

  

错误1'ContactManager.Models.ContactManagerDBEntities2'没有   包含'ApplyPropertyChanges'的定义,没有扩展名   方法'ApplyPropertyChanges'接受第一个类型的参数   可以找到'ContactManager.Models.ContactManagerDBEntities2'(是   你错过了使用指令或程序集   参考?)c:\ users \ sp_admin \ documents \ visual studio   2013 \ Projects \ ContactManager \ ContactManager \ Controllers \ HomeController.cs 123 25 ContactManager

     

错误2'ContactManager.Models.Contact'不包含定义   对于'EntityKey'并且没有扩展方法'EntityKey'接受第一个   可以找到类型为“ContactManager.Models.Contact”的参数(是   你错过了使用指令或程序集   参考?)c:\ users \ sp_admin \ documents \ visual studio   2013 \ Projects \ ContactManager \ ContactManager \ Controllers \ HomeController.cs 123 62 ContactManager

这是HomeControllers.cs

    // GET: /Home/Delete/5

    public ActionResult Delete(int id)
    {
        var contactToDelete = (from c in _entities.Contacts
                               where c.Id == id
                               select c).FirstOrDefault();

        return View(contactToDelete);
    }

    //
    // POST: /Home/Delete/5

    [HttpPost]
    /* public ActionResult Delete(int id, FormCollection collection)  */
    public ActionResult Delete(Contact contactToDelete)
    {
       if (!ModelState.IsValid)
          return View();
       try
       {
          var originalContact = (from c in _entities.Contacts
          where c.Id == contactToDelete.Id
          select c).FirstOrDefault();
          _entities.ApplyPropertyChanges(originalContact.EntityKey.EntitySetName, 
           contactToDelete);   <== here is the code in error ApplyPropertyChanges and
                                    EntityKey.
          _entities.SaveChanges();
          return RedirectToAction("Index");
       }
        catch
        {
            return View();
        }
    }

这是ContactManagerModel.Context.cs我觉得这里缺少什么?但是这个 是从模板生成的。

namespace ContactManager.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class ContactManagerDBEntities2 : DbContext
    {
        public ContactManagerDBEntities2()
            : base("name=ContactManagerDBEntities2")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<Contact> Contacts { get; set; }
    }
}

Contact.cs

namespace ContactManager.Models
{
    using System;
    using System.Collections.Generic;

    public partial class Contact
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
    }
}

知道什么是错误的,因为这段代码是从模板生成的? 感谢

1 个答案:

答案 0 :(得分:3)

我认为你只需要调用Remove方法来删除Contact的实例。见下文:

try
{
  _entities.Contacts.Remove(contactToDelete);
  _entities.SaveChanges();
  return RedirectToAction("Index");
}

更新: 更新Contact的实例时:

_entities.Contacts.Attach(updatedContact);
_entities.Entry(updatedContact).State = EntityState.Modified;
_entities.SaveChanges();

有关更多信息,请查看以下链接,这是一篇关于使用Entity Framework进行CRUD操作的好文章。 CRUD Operations Using Entity Framework