2016-11-20 2 views
-1

Я в то время пытаюсь разработать веб-приложение в ASP.NET MVC и Entity Framework, в моей базе данных есть две связанные таблицы User and Role ,ASP MVC и инфраструктура Entity, необходимо правильно вставить внешний ключ

Я использую шаблон репозитория в своем приложении, у меня есть страница, где я могу добавить новых пользователей, и я пытаюсь разобрать роль для этих новых пользователей. Но, к сожалению, я не могу заставить его работать.

Я получаю следующее сообщение об ошибке от VS, но я не знаю, как исправить проблему.

Невозможно преобразовать тип 'Int' в

классов Model 'project.Models.Database.Role':

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; } 


} 

ViewModel

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; } 



} 

Controller, я пытаюсь разобрать роли, созданной пользователем, роль строки.

[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(); 
    } 

Интерфейс

public interface IClubRepository 
{ 


    void CreateClub(UserProfileViewModel viewMode , string role); 

} 

Repository

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', как вы определили в UserProfileViewModel. – abdul

+0

Можете ли вы определить, что вы имеете в виду, я не совсем понимаю. Возможно, дайте мне пример :) –

+0

Вместо общедоступной виртуальной роли UserRole {get; задавать; }, вы имеете в виду что-то вроде этого, public int UserRole_Id {get; задавать; } –

ответ

0

Эта строка возвращает Int причину UserRole.Id.

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

Вы должны изменить его на что-то вроде:

UserRole = viewModel.UserRole 

 Смежные вопросы

  • Нет связанных вопросов^_^