2014-07-10 10 views
2

에있는 사용자 (계정)와 개체 목록을 연결하는 방법 내 응용 프로그램의 모든 사용자에 대해 개체 목록을 저장하고 싶습니다.ASP.NET MVC

ListMeeting 개 개체마다 추가하고 싶습니다. 물론 내가 엔티티 프레임 워크와 함께이 일을하고 싶습니다

public class Meeting{ 
    int Id {get;set;} 
    Person Person {get;set;}//Meeting with person 
    DateTime DateTime{get;set;} 
} 

질문 : 내가 그쪽으로 AccountModels.cs이를 추가해야합니까? 이 파일에이 파일을 어디에 추가해야합니까? 모임이나 이드 만 있으면 될까요? 아니면 둘 사이에 연관성이 필요한가?

아래의 AccountModels.cs 파일의 내용을 게시하고 있습니다.

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.ComponentModel.DataAnnotations.Schema; 
using System.Data.Entity; 
using System.Globalization; 
using System.Web.Security; 

namespace OdeToFood.Models 
{ 
    public class RegisterExternalLoginModel 
    { 
     [Required] 
     [Display(Name = "User name")] 
     public string UserName { get; set; } 

     public string ExternalLoginData { get; set; } 
    } 

    public class LocalPasswordModel 
    { 
     [Required] 
     [DataType(DataType.Password)] 
     [Display(Name = "Current password")] 
     public string OldPassword { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "New password")] 
     public string NewPassword { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm new password")] 
     [Compare("NewPassword", ErrorMessage = "The new password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 
    } 

    public class LoginModel 
    { 
     [Required] 
     [Display(Name = "User name")] 
     public string UserName { get; set; } 

     [Required] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [Display(Name = "Remember me?")] 
     public bool RememberMe { get; set; } 
    } 

    public class RegisterModel 
    { 
     [Required] 
     [Display(Name = "User name")] 
     public string UserName { get; set; } 

     [Required] 
     [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)] 
     [DataType(DataType.Password)] 
     [Display(Name = "Password")] 
     public string Password { get; set; } 

     [DataType(DataType.Password)] 
     [Display(Name = "Confirm password")] 
     [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] 
     public string ConfirmPassword { get; set; } 
    } 

    public class ExternalLogin 
    { 
     public string Provider { get; set; } 
     public string ProviderDisplayName { get; set; } 
     public string ProviderUserId { get; set; } 
    } 
} 

답변

9

정말 마이크로 소프트가 더 적절한 MVC 개발을 규명하기위한 기본 MVC 프로젝트 템플릿을 일부 개선하는 것이 좋겠지 만, 그 일이있을 것 같지 않습니다.

일반적으로 클래스 당 하나의 파일이 필요합니다. 기술적 인 이유는 없지만 코드로 작업하는 것이 훨씬 쉬워집니다. 예를 들어, Meeting 클래스는 Meeting.cs 파일에 저장되며, 그 파일이 어디에 있는지 궁금 할 필요가 없습니다. 같은 이름의 파일을 찾으십시오.

그런 AccountModels.cs 실제로 대부분 (MVC5 만보기 모델, 실제로, 나는 Microsoft는 파일 AccountViewModels.cs 이름을 지정하여 MVC5이 개선한다는 통지를했다) 보기 모델이 포함되어 있습니다. "모델"이라는 용어는 ASP.NET MVC에서 매우 느슨하게 처리됩니다. Entity Framework에서 지원하는 클래스 또는 POCO는 실제로 "엔터티"(즉, "Entity Framework")라고 불리는 개체이며 기본적으로 DTO 또는 데이터 전송 개체이며 엔터티는 으로 사용하기에 적합하지 않습니다. 모델. 뷰 모델은 뷰의 일부 기능을 나타내는 데 사용되는 클래스입니다. 양식의 경우 일반적으로 작성되거나 업데이트되는 팩시밀리가되지만 대부분의 경우 엔티티에 추가하는 것보다 더 멀리 도달하고 비즈니스 논리가 더 길 수 있습니다.

MVC5 이전의 기본 프로젝트 템플릿에있는 유일한 "엔터티"는 UserProfile입니다. 응용 프로그램의 기본 컨텍스트 인 UsersContext과 함께 동일한 AccountModels.cs 파일에 있습니다. 자신의 파일로이 파일에 이러한 클래스의 각을 분할 훨씬 더 적절할 것 : UserProfile.cs, UsersContext.cs 등 MVC5에서

, 유일한 실체가 ApplicationUser이다, 다시 제대로 IdentityModels.cs에 위치, 파일이 또한 응용 프로그램에 대해 생성 된 기본 컨텍스트가 포함됩니다. 이 파일들이 ApplicationUser.csApplicationDbContext.cs 개의 파일로 분리되어 있다면 더 좋을 것입니다.

어쨌든 일반적인 레이아웃은 Models 디렉토리와 ViewModels 디렉토리가 있어야합니다. 엔티티는 Models 디렉토리 (대부분 컨벤션을 벗어났습니다. 다시 말하지만 실제로는 "모델"에 적합하지 않음) 분명히 모델은 ViewModels 디렉토리에 있습니다. 보통 하나의 프로젝트 (여러 데이터베이스에 연결) 이상을 가지게된다면, 단순한 프로젝트라면 내 컨텍스트를 루트로 옮기거나 컨텍스트만을위한 별도의 디렉토리를 만들 것입니다.

다시 말하지만 이것은 모두 선택 사항입니다.사실, 원하는 것은 무엇이든 할 수 있지만,이 중 일부를 따르면 프로젝트를 훨씬 더 간단하게 유지 관리 할 수 ​​있으며 다른 개발자가 떠나기 쉬운 곳을 선택할 수 있습니다.

UPDATE 정말 당신이 당신의 "사용자"클래스 Meeting을 연결하는 방법에 대해 것 같다 질문 중 하나를 대답하지 않았다

(UserProfile/ApplicationUser는 MVC의 당신의 작업 버전에 따라 다름) .

첫 번째 단계는 항상 두 가지 사이의 관계의 성격을 결정하는 것입니다. 일 대 일입니까? 일대 다? 다 대다? 귀하의 신청서에 대해 말씀 드릴 수는 없지만, Meeting은 다 대다가되어야하는 것처럼처럼 보입니다. 사용자는 많은 회의를 가질 수 있고 회의에는 많은 사용자가 포함될 수 있습니다. 이 경우 당신은 설정 양쪽에 수집 단순히 것 :

USERPROFILE/ApplicationUser을

public virtual ICollection<Meeting> Meetings { get; set; } 

회의

public virtual ICollection<UserProfile> Attendees { get; set; } 

또는

public virtual ICollection<ApplicationUser> Attendees { get; set; } 

그건 내가 Entity Framework와 다 - 다 관계라고 의사 소통하기에 충분할뿐 아니라 자동으로 그 뒤를 잇는 중개 테이블을 만들 것입니다.

+0

당신이 작성한 모든 것을 읽었습니다. 감사합니다. 그러나 뭔가를 놓쳤을 수 있습니다. 나는'클래스 회의 '를 사용자와 연관시키는 방법에 대한 정보를 찾을 수 없었다. 나는'Restaurant'''''''과 같은 클래스를 어떻게 연관시키는 지 알지만, Users는 여기서 다르게 다루어지는 것 같습니다. – Yoda

+0

나는 내 답변을 올린 후 실제로 그 사실을 알게되었으므로 나는 그것에 대해 실제로 앞서있었습니다. 위의 업데이트를 참조하십시오. –