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
我当时正尝试在 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