0

ViewModel을 사용하여 여러 엔티티에 데이터를 저장하고 업데이트하는 방법을 도와 줄 수 있습니까?ASP.NET MVC 4를 사용하여 여러 테이블에 데이터 저장/업데이트

public class StudentViewModel 
    { 
    public Student student; 
    public StudentAddress studentAddress { get; set; } 
    public StudentPhoto studentPhoto { get; set; } 
    // Three entities are related to one to one relationship 

    public DoctorDetailsViewModel() 
    { } 

    } 

내 컨트롤러는 다음과 같습니다 :

나는이처럼 보이는 뷰 모델이 내가 검색하고보기에 (여러 기관에서) 데이터를 표시 할 수 있었다

[HttpPost] 
    public ActionResult Create(StudentViewModel studentViewModel) 
    { 
     if (ModelState.IsValid) 
     { 
      return View(studentViewModel); 
     } 

      Student s = new Student() 
      { 
       Name =studentViewModel.Student.Name, 
       Speciality = studentViewModel.Student.Speciality, 
       DateOfJoinig = studentViewModel.Student.DateOfJoinig, 
       Qualification = studentViewModel.Student.Qualification, 
       Email = studentViewModel.Student.Email 

      }; 

      StudentAddress sa = new StudentAddress() 
      { 
       StudentId= studentViewModel.Student.StudentId, 
       Address = studentViewModel.StudentAddress.Address, 
       Area = studentViewModell.StudentAddress.Area, 
       City = studentViewModel.StudentAddress.City, 
       State = studentViewModel.StudentAddress.State, 
       Pincode = studentViewModel.StudentAddress.Pincode, 
       Phone = studentViewModel.StudentAddress.Phone, 
       Mobile = studentViewModel.StudentAddress.Mobile 

      }; 

      StudentPhoto sp = new StudentPhoto() 
      { 
       StudentId= studentViewModel.Student.StudentId, 
       Photo = studentViewModel.StudentPhoto.Photo 

      };  
      db.Students.Add(s); 
      db.StudentAddress.Add(sa); 
      db.StudentPhoto.Add(sp); 

      db.SaveChanges(); 
      return RedirectToAction("Home"); 
    } 

. 그러나 이제는 어떻게 위의 엔티티를 새로운 데이터로 저장하고 업데이트 할 수 있을지 고민 중입니다. 예제의 대부분은 매핑이 자동이지만,이 경우 데이터는 여러 엔터티에 속합니다.

가장 좋은 방법은 무엇입니까? 감사.

+0

무엇이 문제입니까? 당신은 당신이하는 일을 보여줄뿐입니다. –

답변

0

테스트하지만, 관계형 데이터베이스를 사용하는 동안이

[HttpPost] 
public ActionResult Create(StudentViewModel studentViewModel) 
{ 
    if (!ModelState.IsValid) // added ! so that you can do something if it is valid other than redisplay the Create View with the model 
    { 
     return View(studentViewModel); 
    } 

     Student s = new Student() 
     { 
      Name =studentViewModel.Student.Name, 
      Speciality = studentViewModel.Student.Speciality, 
      DateOfJoinig = studentViewModel.Student.DateOfJoinig, 
      Qualification = studentViewModel.Student.Qualification, 
      Email = studentViewModel.Student.Email 

     }; 

     db.Students.Add(s); 
     db.SaveChanges(); // Post the changes with the student and save changes so you have the correct studentId PrimaryKey value from the database. Note: EF should update your object with the correct Id on SaveChanges() 

     StudentAddress sa = new StudentAddress() 
     { 
      StudentId= studentViewModel.Student.StudentId, 
      Address = studentViewModel.StudentAddress.Address, 
      Area = studentViewModell.StudentAddress.Area, 
      City = studentViewModel.StudentAddress.City, 
      State = studentViewModel.StudentAddress.State, 
      Pincode = studentViewModel.StudentAddress.Pincode, 
      Phone = studentViewModel.StudentAddress.Phone, 
      Mobile = studentViewModel.StudentAddress.Mobile 

     }; 

     StudentPhoto sp = new StudentPhoto() 
     { 
      StudentId= studentViewModel.Student.StudentId, 
      Photo = studentViewModel.StudentPhoto.Photo 

     };  
     // don't add it again! db.Students.Add(s); 
     db.StudentAddress.Add(sa); 
     db.StudentPhoto.Add(sp); 

     db.SaveChanges(); 
     return RedirectToAction("Home"); 
} 
+0

하지만 db.save는 데이터베이스의 동일한 테이블을 주소 지정한다고 생각합니다. – Vini

0

도움이 될 수 없습니다, 그것은 모두 StudentAddress 및 StudentPhoto 테이블에 StudentId 외부 키 코드와 같이 studentaddress는 학생의 자녀가 될 것이다 나의 이해이다. Student에 탐색 속성을 추가하고 주소 및 사진을 이러한 속성에 할당하면 Entity 프레임 워크가 속성을 저장합니다. 모든 모델의

Student s = new Student {...} 
s.StudentAddress = new StudentAddress {...} 
s.StudentPhoto = new StudentPhoto {...} 

db.Students.Add (s); 
db.SaveChanges(); 
2

먼저 같은 뭔가가 다음과 같이한다 :

public class Student 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StudentID { get; set; } 

    public string Speciality { get; set; } 

    public DateTime DateOfJoinig { get; set; } 

    public string Qualification { get; set; } 

    public string Email { get; set; } 
} 

public class StudentAddress 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StudentAddressID { get; set; } 

    [Required] 
    [ForeignKey("Student")] 
    public int StudentID { get; set; } 

    public virtual Student Student { get; set; } 

    public string Address { get; set; } 

    public string Area { get; set; } 

    public string City { get; set; } 

    public string State { get; set; } 

    public string Pincode { get; set; } 

    public string Phone { get; set; } 

    public string Mobile { get; set; } 
} 

public class StudentPhoto 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int StudentPhotoID { get; set; } 

    [Required] 
    [ForeignKey("Student")] 
    public int StudentID { get; set; } 

    public virtual Student Student { get; set; } 

    public string Photo { get; set; } 
} 

콰지 당신이 탐색 속성을 가지고 있어야 언급 한 바와 같이. 편집 목적을 위해 귀하의 ID 속성에 대한 그런 다음 클라이언트 측에서 당신이 숨겨진해야 필드 :

@Html.HiddenFor(s => s.StudentID) 

컨트롤러 방법은 다음과 같이 표시됩니다 후 것을 :

[HttpPost] 
    public ActionResult Create(StudentViewModel studentViewModel) 
    { 
     if (!ModelState.IsValid) 
     { 
      return View(studentViewModel); 
     } 

     studentViewModel.StudentAddress.Student = studentViewModel.Student; 
     studentViewModel.StudentPhoto.Student = studentViewModel.Student; 
     if (studentViewModel.Student.StudentID > 0) 
      db.Students.Attach(studentViewModel.Student); 
     else 
      db.Students.Add(studentViewModel.Student); 
     db.SaveChanges(); 
     return RedirectToAction("Home"); 
    } 

당신은 ID를 할당 할 필요가 없습니다 속성을 할당해야하지만 탐색 속성을 할당해야합니다.

관련 문제