#c# #asp.net-mvc #entity-framework
Вопрос:
Я пытаюсь использовать две таблицы в одном представлении в своем asp.net mvc
проекте, но я делаю некоторые ошибки, и я получаю эту ошибку:
Система.Исключение InvalidOperationException: Элемент модели, переданный в словарь, имеет тип ‘System.Data.Entity.Инфраструктура.DbQuery
1[Question]
, но для этого словаря требуется элемент модели типа «Система».Коллекции.Общий.IEnumerable1[projet.Models.userdbcontext]
Класс Questions.cs
:
public class Question
{
public int Id { get; set; }
public int userID { get; set; }
}
Класс User.cs
:
public class User
{
public int Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public string Name { get; set; }
}
Модель userdbcontext.cs
:
{
public userdbcontext()
{ }
public DbSet<Question> Questiondb { get; set; }
public DbSet<User> Usersdb { get; set; }
}
а это контроллер:
private userdbcontext db = new userdbcontext();
// GET: question
public ActionResult Index()
{
var l = from e in db.Questiondb
select e;
return View(l);
}
Вид:
@model IEnumerable<projet.Models.userdbcontext>
Комментарии:
1. Я знаю, что мне нужно передать обе таблицы в представление, но я не знаю, как это сделать
2. Я попробовал что-то вроде:
var l = from e in db.Questiondb from ee in db.UsersDb where e.Id != null amp;amp; ee.Id != null select new userdbcontext { Questiondb =e , UsersDb =ee} return View(l);
но у меня получилось :cannot implicitly convert type 'projet.Models.Question' to 'System.Data.Entity.DbSet<projet.Models.Questions>'
Ответ №1:
ваша ошибка заключается в том, что вы пытаетесь отправить DbSet<>
представление, которым трудно управлять, поэтому для решения проблемы вам необходимо создать новый класс ViewModel
, в котором вы храните значение DbSet<>
, а List<>
затем передаете его в представление следующим образом :
Модель userdbcontext.cs:
public class userdbcontext : DbContext
{
public userdbcontext()
{ }
public DbSet<Question> Questiondb { get; set; }
public DbSet<User> Usersdb { get; set; }
}
public class ViewModel
{
public List<Question> Question { get; set; }
public List<User> User { get; set; }
}
В контроллере:
private userdbcontext db = new userdbcontext();
// GET: question
public ActionResult Index()
{
var l = new ViewModel();
l.Question = db.Questiondb.ToList();
l.User = db.Usersdb.ToList();
return View(l);
}
и в представлении:
@model projet.Models.ViewModel
Ответ №2:
Вам необходимо создать модель представления:
public class ViewModel
{
public List<Question> Questions { get; set; }
public List<User> Users { get; set; }
}
Экшен
public ActionResult Index()
{
var vm = new ViewModel{
Questions = db.Questiondb.ToList(),
Users= db.Userdb.ToList()
}
return View(vm);
}
Вид
@model projet.Models.ViewModel
....
<!-- Accessing Model Variables -->
@Model.Questions...
@Model.Users...