public int ID { get; set; }
[Required]
public string Surname{get;set;}
[Required (ErrorMessage="FirstName Required")]
public string Firstname{get;set;}
[Required(ErrorMessage="please enter your OtherNames")]
public string Othername{get;set;}
[Required(ErrorMessage="please enter your sex")]
public string Sex{get;set;}
[Required (ErrorMessage="please enter your DateOfBirth")]
public DateTime DateOfBirth{get;set;}
[Required(ErrorMessage="Address is required")]
public string Address{get;set;}
[Required(ErrorMessage="city is required")]
public string City{get;set;}
[Required(ErrorMessage="State is required")]
public string State{get;set;}
public string Country{get;set;}
}
我创建了一个界面,充当我的域层和我的WEBUI之间的中间人
public interface IStudentRepository
{
IQueryable<Student> Student { get; }
//we using a method to save the record into our database
void Save(Student student);
}
接口由我的存储库类实现,该类执行将记录保存到数据库并检索它的所有操作。
public class EFRepository:IStudentRepository
{
private EFDBContext context = new EFDBContext();
public IQueryable<Student> Student{ get { return context.Students; } }
public void Save(Student student)
{
if (student.ID == 0)
{
context.Students.Add(student);
}
context.SaveChanges();
}
然后我有一个视图,它创建了一个学生类的实例,并使用该接口将记录存储在数据库中,这完全有效。
[HttpPost]
public ActionResult Registration(Student student)
{
if (ModelState.IsValid)
{
studentrepository.Save(student);
}
return View(student);
}
这对我来说很完美..
但是我希望能够更新这些相同的字段,以便学生对字段进行更改,并且应该覆盖数据库中的现有记录。 我已经看过我的教程,其中学生ID号作为动作链接传递,然后覆盖现有记录。
然而,我想要的是学生能够使用相同的按钮编辑相同的表格,并显示相同的视图。任何帮助将不胜感激。
答案 0 :(得分:1)
您只需要将存储库方法更改为如下所示:
public class EFRepository:IStudentRepository
{
private EFDBContext context = new EFDBContext();
public IQueryable<Student> Student{ get { return context.Students; } }
public void Save(Student student)
{
if (student.ID == 0)
{
context.Students.Add(student);
}
else
{
Student existingStudent = context.Students.FirstOrDefault(x => x.ID == student.ID);
if(existingStudent != null)
{
context.Entry(existingStudent).CurrentValues.SetValues(student);
context.Entry(existingStudent).State = System.Data.Entity.EntityState.Modified;
}
}
context.SaveChanges();
}
或者您可以使用Entity Framework Attach方法,因为这将自动跟踪对象状态并更新详细信息