我在MVC中使用实体框架。我有两个使用DBContext 从SQL表填充的模型
public class Incident
{
public Guid IncidentKey { get; set; }
public int IncidentID { get; set; }
}
public class Request
{
public Guid RequestKey { get; set; }
public int RequestID { get; set; }
}
以下是我如何从SQL 中获取数据
public class CallViewerDbContext : DbContext
{
public DbSet<Incident> Incident { get; set; }
public DbSet<Request> Request { get; set; }
}
public class SqlData : IIncident, IRequest
{
private readonly CallViewerDbContext db;
public SqlData(CallViewerDbContext db)
{
this.db = db;
}}
internal static void RegisterContainer(HttpConfiguration httpConfiguration)
{
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
builder.RegisterApiControllers(typeof(MvcApplication).Assembly);
builder.RegisterType<SqlData>()
.As<IIncident>()
.InstancePerRequest();
builder.RegisterType<SqlData>()
.As<IRequest>()
.InstancePerRequest();
builder.RegisterType<CallViewerDbContext>().InstancePerRequest();
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
httpConfiguration.DependencyResolver = new AutofacWebApiDependencyResolver(container);
}
我正在尝试创建一个新模型,当我把它放在一个新的Razor视图中时,它将允许我获得两个实体的计数。我目前可以通过以下方法获得一个。
IIncident db;
public HomeController(IIncident db)
{
this.db = db;
}
public ActionResult Index()
{
var model = db.IGetAll();
return View(model);
}
public IEnumerable<Incident> IGetAll()
{
return db.Incident;
}
我试着做一个新模型。
public class DataModel
{
public List<Incident> allIncidents { get; set; }
public List<Request> allRequests { get; set; }
}
我尝试将其添加到注册容器
builder.RegisterType<SqlData>()
.As <IDataModel>()
.InstancePerRequest();
然后更新了家庭控制器
IDataModel db;
public HomeController(IDataModel db)
{
this.db = db;
}
public ActionResult Index()
{
var model = db.MGetAll();
return View(model);
}
public IEnumerable<Incident> MGetAll()
{
return db.Incident;
}
我正试图使用MGetAll方法返回数据以获得事件列表,然后我有另一个方法对请求执行同样的操作。我试图先将单个计数返回到视图中,然后再添加第二个计数。
我现在得到下面的堆栈跟踪错误
传递到字典中的模型项的类型为"System.Data.Entity.DbSet1[CallViewerData.Models.Incident]', but this dictionary requires a model item of type 'System.Collections.Generic.IEnumerable
1[CallViewerData.Models.DataModel]"。
如有任何帮助,我们将不胜感激。
这样的东西应该可以工作:
public ActionResult Index()
{
var model = PrepareViewModel();
return View(model);
}
private DataModel PrepareViewModel()
{
return new DataModel
{
allIncidents = db..., // Get Incidents
allRequests = db... // Get Requests
};
}
在你看来
@model namespace.DataModel
然后您可以使用Model.allIncidents
和Model.allRequests
访问它们。