Я в то время пытаюсь разработать веб-приложение в 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();
}
'UserRole.Id' возвращается в' int' не типа 'Role', как вы определили в UserProfileViewModel. – abdul
Можете ли вы определить, что вы имеете в виду, я не совсем понимаю. Возможно, дайте мне пример :) –
Вместо общедоступной виртуальной роли UserRole {get; задавать; }, вы имеете в виду что-то вроде этого, public int UserRole_Id {get; задавать; } –