ASP MVC 和 Entity framework,需要以正确的方式插入外键

ASP MVC and Entity framework, need to insert foreign key the right way

我当时正尝试在 ASP.NET MVC 和 Entity Framework 中开发 Web 应用程序,在我的数据库中我有两个相关的表 User 和 Role。

我在我的应用程序中使用存储库模式,我有一个可以添加新用户的页面,我正在尝试为这些新用户解析一个角色。但不幸的是我无法让它工作。

我从 VS 收到以下错误消息,但我不知道如何解决该问题。

无法将类型 'int' 转换为 '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; }


 }

视图模型

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

界面

 public interface IClubRepository
{


    void CreateClub(UserProfileViewModel viewMode , string role);

}

存储库

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

    }

此行将 return 是 UserRole.Id 的整数原因。

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

您需要将其更改为:

UserRole = viewModel.UserRole