C# MVC5将模型传递给视图:基础提供程序在打开时失败?
我正在构建一个相当简单的代码优先的MVC5库存跟踪应用程序。我已经将我的应用程序添加到Seed()以及我可以查看/创建/编辑/删除的所有维护表(位置、供应商、状态等)。我现在正在为我的主[INV_Assets]模型处理C# MVC5将模型传递给视图:基础提供程序在打开时失败?,c#,asp.net-mvc,entity-framework,razor,asp.net-mvc-5,C#,Asp.net Mvc,Entity Framework,Razor,Asp.net Mvc 5,我正在构建一个相当简单的代码优先的MVC5库存跟踪应用程序。我已经将我的应用程序添加到Seed()以及我可以查看/创建/编辑/删除的所有维护表(位置、供应商、状态等)。我现在正在为我的主[INV_Assets]模型处理视图,但当我尝试运行应用程序时,我收到了: System.Data.DataException:初始化数据库时发生异常。有关详细信息,请参阅InnerException。 InnerException:基础提供程序在打开时失败。 错误发生在myHomeController中的以下位
视图
,但当我尝试运行应用程序时,我收到了:
System.Data.DataException:初始化数据库时发生异常。有关详细信息,请参阅InnerException。
InnerException:基础提供程序在打开时失败。
错误发生在myHomeController中的以下位置:
TrackerContext _db = new TrackerContext();
public ActionResult Index(INV_Assets defModel)
{
var assetList = _db.INV_Assets.ToList(); // EXCEPTION!
return View(assetList);
}
我正试图将我的主模型[INV_Assets]传递给视图,这样我就可以foreach
遍历模型类中的所有实例,并将它们显示在表中。有人能看出我可能做错了什么吗
下面我还介绍了[INV\u Assets
]和视图的模型本身:
投资资产:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using GridMvc.DataAnnotations;
using System.Web.Mvc;
using Tracker.Models;
namespace Tracker.Models
{
[GridTable(PagingEnabled = true, PageSize = 30)]
public class INV_Assets
{
// Setting GridColumn Annotations allows you to use AutoGenerateColumns on view to auto create the Grid based on the model.
public int Id { get; set; }
public int Model_Id { get; set; }
[ForeignKey("Model_Id")]
public virtual INV_Models Model { get; set; }
[Required]
public int Manufacturer_Id { get; set; }
[ForeignKey("Manufacturer_Id")]
public virtual INV_Manufacturers Manufacturer { get; set; }
[Required]
public int Type_Id { get; set; }
[ForeignKey("Type_Id")]
public virtual INV_Types Type { get; set; }
[Required]
public int Location_Id { get; set; }
[ForeignKey("Location_Id")]
public virtual INV_Locations Location { get; set; }
public int Vendor_Id { get; set; }
[ForeignKey("Vendor_Id")]
public virtual INV_Vendors Vendor { get; set; }
[Required]
public int Status_Id { get; set; }
[ForeignKey("Status_Id")]
public virtual INV_Statuses Status { get; set; }
public string ip_address { get; set; }
public string mac_address { get; set; }
public string note { get; set; }
public string owner { get; set; }
public decimal cost { get; set; }
public string po_number { get; set; }
public string description { get; set; }
public int invoice_number{ get; set; }
[Required]
public string serial_number { get; set; }
[Required]
public string asset_tag_number { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? acquired_date { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? disposed_date { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime created_date { get; set; }
[Required]
public string created_by { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime modified_date { get; set; }
public string modified_by { get; set; }
// Flag to specify if item is available? (Not signed out, not auctioned, recycled, etc.)
//public bool available { get; set; }
}
}
@using GridMvc.Html
@using System.Collections.Generic
@model List<Tracker.Models.INV_Assets>
@{
ViewBag.Title = "Home Page";
}
<table style="width:100%;">
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td>@Html.DisplayFor(modelItem => item.Location)</td>
<td>@Html.DisplayFor(modelItem => item.owner)</td>
<td>@Html.DisplayFor(modelItem => item.Type)</td>
<td>@Html.DisplayFor(modelItem => item.Manufacturer)</td>
<td>@Html.DisplayFor(modelItem => item.Model)</td>
<td>@Html.DisplayFor(modelItem => item.Vendor)</td>
<td>@Html.DisplayFor(modelItem => item.description)</td>
<td>@Html.DisplayFor(modelItem => item.asset_tag_number)</td>
<td>@Html.DisplayFor(modelItem => item.serial_number)</td>
<td>@Html.DisplayFor(modelItem => item.ip_address)</td>
<td>@Html.DisplayFor(modelItem => item.mac_address)</td>
<td>@Html.DisplayFor(modelItem => item.po_number)</td>
<td>@Html.DisplayFor(modelItem => item.invoice_number)</td>
<td>@Html.DisplayFor(modelItem => item.cost)</td>
<td>@Html.DisplayFor(modelItem => item.note)</td>
<td>@Html.DisplayFor(modelItem => item.acquired_date)</td>
<td>@Html.DisplayFor(modelItem => item.disposed_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_by)</td>
<td>@Html.DisplayFor(modelItem => item.modified_date)</td>
<td>@Html.DisplayFor(modelItem => item.modified_by)</td>
</tr>
}
</table>
[INV_Assets]视图:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using GridMvc.DataAnnotations;
using System.Web.Mvc;
using Tracker.Models;
namespace Tracker.Models
{
[GridTable(PagingEnabled = true, PageSize = 30)]
public class INV_Assets
{
// Setting GridColumn Annotations allows you to use AutoGenerateColumns on view to auto create the Grid based on the model.
public int Id { get; set; }
public int Model_Id { get; set; }
[ForeignKey("Model_Id")]
public virtual INV_Models Model { get; set; }
[Required]
public int Manufacturer_Id { get; set; }
[ForeignKey("Manufacturer_Id")]
public virtual INV_Manufacturers Manufacturer { get; set; }
[Required]
public int Type_Id { get; set; }
[ForeignKey("Type_Id")]
public virtual INV_Types Type { get; set; }
[Required]
public int Location_Id { get; set; }
[ForeignKey("Location_Id")]
public virtual INV_Locations Location { get; set; }
public int Vendor_Id { get; set; }
[ForeignKey("Vendor_Id")]
public virtual INV_Vendors Vendor { get; set; }
[Required]
public int Status_Id { get; set; }
[ForeignKey("Status_Id")]
public virtual INV_Statuses Status { get; set; }
public string ip_address { get; set; }
public string mac_address { get; set; }
public string note { get; set; }
public string owner { get; set; }
public decimal cost { get; set; }
public string po_number { get; set; }
public string description { get; set; }
public int invoice_number{ get; set; }
[Required]
public string serial_number { get; set; }
[Required]
public string asset_tag_number { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? acquired_date { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? disposed_date { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime created_date { get; set; }
[Required]
public string created_by { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime modified_date { get; set; }
public string modified_by { get; set; }
// Flag to specify if item is available? (Not signed out, not auctioned, recycled, etc.)
//public bool available { get; set; }
}
}
@using GridMvc.Html
@using System.Collections.Generic
@model List<Tracker.Models.INV_Assets>
@{
ViewBag.Title = "Home Page";
}
<table style="width:100%;">
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td>@Html.DisplayFor(modelItem => item.Location)</td>
<td>@Html.DisplayFor(modelItem => item.owner)</td>
<td>@Html.DisplayFor(modelItem => item.Type)</td>
<td>@Html.DisplayFor(modelItem => item.Manufacturer)</td>
<td>@Html.DisplayFor(modelItem => item.Model)</td>
<td>@Html.DisplayFor(modelItem => item.Vendor)</td>
<td>@Html.DisplayFor(modelItem => item.description)</td>
<td>@Html.DisplayFor(modelItem => item.asset_tag_number)</td>
<td>@Html.DisplayFor(modelItem => item.serial_number)</td>
<td>@Html.DisplayFor(modelItem => item.ip_address)</td>
<td>@Html.DisplayFor(modelItem => item.mac_address)</td>
<td>@Html.DisplayFor(modelItem => item.po_number)</td>
<td>@Html.DisplayFor(modelItem => item.invoice_number)</td>
<td>@Html.DisplayFor(modelItem => item.cost)</td>
<td>@Html.DisplayFor(modelItem => item.note)</td>
<td>@Html.DisplayFor(modelItem => item.acquired_date)</td>
<td>@Html.DisplayFor(modelItem => item.disposed_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_by)</td>
<td>@Html.DisplayFor(modelItem => item.modified_date)</td>
<td>@Html.DisplayFor(modelItem => item.modified_by)</td>
</tr>
}
</table>
@使用GridMvc.Html
@使用System.Collections.Generic
@模型列表
@{
ViewBag.Title=“主页”;
}
@foreach(模型中的var项目){
@DisplayFor(modelItem=>item.Status)
@DisplayFor(modelItem=>item.Location)
@DisplayFor(modelItem=>item.owner)
@DisplayFor(modelItem=>item.Type)
@DisplayFor(modelItem=>item.Manufacturer)
@DisplayFor(modeleItem=>item.Model)
@DisplayFor(modelItem=>item.Vendor)
@DisplayFor(modelItem=>item.description)
@DisplayFor(modelItem=>item.asset\u标记\u编号)
@DisplayFor(modelItem=>item.serial\u编号)
@DisplayFor(modeleItem=>item.ip\u地址)
@DisplayFor(modelItem=>item.mac\u地址)
@DisplayFor(modelItem=>item.po\u编号)
@Html.DisplayFor(modelItem=>item.invoice\u编号)
@DisplayFor(modelItem=>item.cost)
@DisplayFor(modeleItem=>item.note)
@DisplayFor(modelItem=>item.acquired\u日期)
@DisplayFor(modelItem=>item.disposed\u日期)
@DisplayFor(modelItem=>item.created\u日期)
@DisplayFor(modelItem=>item.created_by)
@DisplayFor(modelItem=>item.modified\u日期)
@DisplayFor(modelItem=>item.modified_by)
}
编辑:
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using GridMvc.DataAnnotations;
using System.Web.Mvc;
using Tracker.Models;
namespace Tracker.Models
{
[GridTable(PagingEnabled = true, PageSize = 30)]
public class INV_Assets
{
// Setting GridColumn Annotations allows you to use AutoGenerateColumns on view to auto create the Grid based on the model.
public int Id { get; set; }
public int Model_Id { get; set; }
[ForeignKey("Model_Id")]
public virtual INV_Models Model { get; set; }
[Required]
public int Manufacturer_Id { get; set; }
[ForeignKey("Manufacturer_Id")]
public virtual INV_Manufacturers Manufacturer { get; set; }
[Required]
public int Type_Id { get; set; }
[ForeignKey("Type_Id")]
public virtual INV_Types Type { get; set; }
[Required]
public int Location_Id { get; set; }
[ForeignKey("Location_Id")]
public virtual INV_Locations Location { get; set; }
public int Vendor_Id { get; set; }
[ForeignKey("Vendor_Id")]
public virtual INV_Vendors Vendor { get; set; }
[Required]
public int Status_Id { get; set; }
[ForeignKey("Status_Id")]
public virtual INV_Statuses Status { get; set; }
public string ip_address { get; set; }
public string mac_address { get; set; }
public string note { get; set; }
public string owner { get; set; }
public decimal cost { get; set; }
public string po_number { get; set; }
public string description { get; set; }
public int invoice_number{ get; set; }
[Required]
public string serial_number { get; set; }
[Required]
public string asset_tag_number { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? acquired_date { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime? disposed_date { get; set; }
[Required]
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime created_date { get; set; }
[Required]
public string created_by { get; set; }
[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime modified_date { get; set; }
public string modified_by { get; set; }
// Flag to specify if item is available? (Not signed out, not auctioned, recycled, etc.)
//public bool available { get; set; }
}
}
@using GridMvc.Html
@using System.Collections.Generic
@model List<Tracker.Models.INV_Assets>
@{
ViewBag.Title = "Home Page";
}
<table style="width:100%;">
@foreach (var item in Model) {
<tr>
<td>@Html.DisplayFor(modelItem => item.Status)</td>
<td>@Html.DisplayFor(modelItem => item.Location)</td>
<td>@Html.DisplayFor(modelItem => item.owner)</td>
<td>@Html.DisplayFor(modelItem => item.Type)</td>
<td>@Html.DisplayFor(modelItem => item.Manufacturer)</td>
<td>@Html.DisplayFor(modelItem => item.Model)</td>
<td>@Html.DisplayFor(modelItem => item.Vendor)</td>
<td>@Html.DisplayFor(modelItem => item.description)</td>
<td>@Html.DisplayFor(modelItem => item.asset_tag_number)</td>
<td>@Html.DisplayFor(modelItem => item.serial_number)</td>
<td>@Html.DisplayFor(modelItem => item.ip_address)</td>
<td>@Html.DisplayFor(modelItem => item.mac_address)</td>
<td>@Html.DisplayFor(modelItem => item.po_number)</td>
<td>@Html.DisplayFor(modelItem => item.invoice_number)</td>
<td>@Html.DisplayFor(modelItem => item.cost)</td>
<td>@Html.DisplayFor(modelItem => item.note)</td>
<td>@Html.DisplayFor(modelItem => item.acquired_date)</td>
<td>@Html.DisplayFor(modelItem => item.disposed_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_date)</td>
<td>@Html.DisplayFor(modelItem => item.created_by)</td>
<td>@Html.DisplayFor(modelItem => item.modified_date)</td>
<td>@Html.DisplayFor(modelItem => item.modified_by)</td>
</tr>
}
</table>
我运行了ELMAH错误日志记录,当异常发生时,在我点击continue之后,日志显示如下:
System.Data.SqlClient.SqlException-
无法将文件“C:\analysis Projects\Tracker\Tracker DEV\Tracker\Tracker\App\u Data\TrackerDBDev.mdf”作为数据库“TrackerDBDev”附加。
..?您没有发布的内容是唯一需要的:Web.config中的连接字符串。由于您的数据库在错误中有一个.mdf
扩展,我猜您已经部署了项目,现在无法连接到数据库。像这样的数据库文件由LocalDB使用,它仅在VisualStudio的范围内可用。部署到生产服务器后,项目必须使用成熟的数据库,如SQL server。您只需在Web.config中更改项目的连接字符串(或者更好,类似于Web.Release.config,这样可以在发布过程中转换Web.config),使其指向包含应用程序数据库的完整SQL Server实例。感谢您的回复!我以前遇到过类似的ish,修复方法是将连接字符串中的DB文件重命名为:[code>[]
-[TrackerDBDev.mdf]到[TrackerDBDev-1.mdf]。您能否详细说明是什么原因导致了这一问题,以及为什么这一特定行动解决了这一问题?