我在网上看了很多这个错误的例子。但我不知道应用它们。我正在使用EF 6.1.2和Visual Studio 2012.一切都在一个解决方案中。我为实体模型尝试了一个单独的类库,但它没有用。所以我认为我会简化一些事情,但它仍然无效。
如果您还有其他需要,请告诉我。谢谢!
这是我的控制器文件:为了安全起见,我在文件中添加了所有内容。第一个动作方法是我唯一使用的方法。
CustomerController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using ClaimsManagement2.Models;
namespace ClaimsManagement2.Controllers
{
public class CustomerController : Controller
{
//
// GET: /Customer/
public ActionResult Index()
{
ClaimsManagementContext customerContext = new ClaimsManagementContext()
IEnumerable<Customer> customer = customerContext.Customers.ToList();
return View(customer);
}
//
// GET: /Customer/Details/5
public ActionResult Details(int id)
{
return View();
}
//
// GET: /Customer/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Customer/Create
[HttpPost]
public ActionResult Create(FormCollection collection)
{
try
{
// TODO: Add insert logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Customer/Edit/5
public ActionResult Edit(int id)
{
return View();
}
//
// POST: /Customer/Edit/5
[HttpPost]
public ActionResult Edit(int id, FormCollection collection)
{
try
{
// TODO: Add update logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
//
// GET: /Customer/Delete/5
public ActionResult Delete(int id)
{
return View();
}
//
// POST: /Customer/Delete/5
[HttpPost]
public ActionResult Delete(int id, FormCollection collection)
{
try
{
// TODO: Add delete logic here
return RedirectToAction("Index");
}
catch
{
return View();
}
}
}
}
Index.cshtml文件
@model IEnumerable<ClaimsManagement2.Models.Customer.>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<th>
@Html.DisplayNameFor(model => model.AgentID)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.AgentID)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.CustomerID }) |
@Html.ActionLink("Details", "Details", new { id=item.CustomerID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.CustomerID })
</td>
</tr>
}
</table>
ClaimsManagementContext.cs
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace ClaimsManagement2.Models
{
public class ClaimsManagementContext : DbContext
{
public DbSet<Customer> Customers { get; set; }
}
}
Customer.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
namespace ClaimsManagement2.Models
{
[Table("Customers")]
public class Customer
{
public int CustomerID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int AgentID { get; set; }
public string Email { get; set; }
}
}
除了给你一个数据库本身的脚本之外,我想不出别的什么可以给你。
答案 0 :(得分:0)
只需让您的观看时间为List
而不是Enumerable
,或者在控制器中调用AsEnumerable
。您可以在控制器中执行以下操作:
IEnumerable<Customer> customer = customerContext.Customers.AsEnumerable();
或者在你看来:
@model IList<ClaimsManagement2.Models.Customer>
答案 1 :(得分:0)
如果您只是循环浏览视图中的数据(因为它看起来像你)并且没有添加或希望操纵该集合,那么只需通过调用.AsEnumerable()
而不是{来将您的集合转换为可枚举的数据集控制器中的{1}},如下所示:
ToList()
IEnumerable<Customer> customer = customerContext.Customers.AsEnumerable();
接口实现了操作集合的其他方法,并且始终建议仅实现您需要的功能。
答案 2 :(得分:0)
我在网上跟踪了一些不好的指示,我创建了一个我不需要的Context类和Customer类。这给我带来了麻烦。不幸的是,当您关注YouTube视频时会发生这种情况。我需要的只是实体框架创建的类。我也不需要将我的上下文实例化放在action方法中。
需要删除Customer.cs和ClaimsManagementContext.cs。这些是由我而不是EF创造的。我现在确定何时或为什么要这样做。但现在我知道我不必这么做。