2016-11-20 3 views
-1

ASP.NET MVC 및 Entity Framework에서 웹 응용 프로그램을 개발하려고 할 때, 내 데이터베이스에 두 개의 관련 테이블이 있습니까? 사용자 및 역할 .ASP MVC 및 엔터티 프레임 워크, 외부 키를 올바른 방법으로 삽입해야 함

내 응용 프로그램에서 리포지토리 패턴을 사용하면 새 사용자를 추가 할 수있는 페이지가 있으며 이러한 새로운 사용자의 역할을 구문 분석하려고합니다. 하지만 불행히도 나는 그것을 작동시키지 못한다.

VS에서 다음과 같은 오류 메시지가 표시되지만 문제를 해결하는 방법을 모릅니다.

가 'project.Models.Database.Role'

모델 클래스 유형 'INT'을 변환 할 수 없습니다 :

public class User 
{ 
    [Key] 
    public int Id { get; set; } 

    public string UserMail { get; set; } 
    public string UserPassword { get; set; } 

    public virtual Role UserRole { get; set; } 


} 

public class Role 
{ 
    public int Id { get; set; } 
    public string RoleName { get; set; } 
    private List<User> users; 

    public Role() 
    { 
     users = new List<User>(); 
    } 

    public virtual ICollection<User> user { get; set; } 


} 

뷰 모델

public class UserProfileViewModel 
{ 
    //user 
    [Required] 
    [DisplayName("e-mail")] 
    public string UserMail { get; set; } 
    [Required] 
    [DataType(DataType.Password)] 
    [DisplayName("adgangskode")] 
    public string UserPassword { get; set; } 

    public virtual Role UserRole { get; set; } 


    [Required] 
    [DisplayName("navn")] 
    public string Name { get; set; } 
    [Required] 
    [DisplayName("telefonnummer")] 
    public int Phone { get; set; } 



} 

컨트롤러, 나는 구문 분석을 시도하고있다 역할이 생성되면 사용자가 생성됩니다.

[ValidateInput(false)] 
    [HttpPost] 
    public ActionResult CreateClub(UserProfileViewModel viewModel, string role) 
    { 

     role = string.Empty; 
     Role roles = db.Roles.SingleOrDefault(x => x.RoleName == "club"); 
     role = roles.Id.ToString(); 
     ViewBag.Test = role; 

     try 
     { 
      if (ModelState.IsValid) 
      { 

       _repository.CreateClub(viewModel, role); 
       ViewBag.Succes = "Klub oprettet"; 
      } 


     } 

     catch (Exception ex) 
     { 

      ModelState.AddModelError("", ex); 
      ViewData["CreateError"] = "Unable to create; view innerexception"; 
     } 


     return View(); 
    } 

이 줄은 UserRole.Id의 INT 원인을 반환합니다

public void CreateClub(UserProfileViewModel viewModel, string role) // <- it wont parse a role 
    { 
     var user = new User() 
     { 


      UserMail = viewModel.UserMail, 
      UserPassword = viewModel.UserPassword, 
      UserRole = viewModel.UserRole.Id //<- Error comes here 

     }; 

     var profile = new Profile() 
     { 
      Name = viewModel.Name, 
      Phone = viewModel.Phone 
     }; 

     user.profile = profile; 


     db.Users.Add(user); 
     db.Profiles.Add(profile); 
     db.SaveChanges(); 

    } 
+0

는'UserRole.Id'는'int'없는 유형의'Role'을 반환 :

UserRole = viewModel.UserRole.Id //<- Error comes here 

당신은 같은 뭔가를 변경해야합니다. – abdul

+0

당신이 의미하는 것을 정의 할 수 있습니까? 나는 완전히 이해하지 못합니다. 어쩌면 예를 들어 :) –

+0

대신 공용 가상 역할 UserRole {get; 세트; }, 이것과 같은 것을 의미합니까, public int UserRole_Id {get; 세트; } –

답변

0

인터페이스

public interface IClubRepository 
{ 


    void CreateClub(UserProfileViewModel viewMode , string role); 

} 

저장소. 당신이 UserProfileViewModel에 정의 된

UserRole = viewModel.UserRole