C# MVC5将模型传递给视图:基础提供程序在打开时失败?

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中的以下位

我正在构建一个相当简单的代码优先的MVC5库存跟踪应用程序。我已经将我的应用程序添加到Seed()以及我可以查看/创建/编辑/删除的所有维护表(位置、供应商、状态等)。我现在正在为我的主[INV_Assets]模型处理
视图
,但当我尝试运行应用程序时,我收到了:

System.Data.DataException
初始化数据库时发生异常。有关详细信息,请参阅InnerException。

InnerException
基础提供程序在打开时失败。

错误发生在my
HomeController中的以下位置:

    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]。您能否详细说明是什么原因导致了这一问题,以及为什么这一特定行动解决了这一问题?