C# Store update、insert或delete语句影响了实体框架中意外的行数(0)
因此,我正在构建一个时间表应用程序,用户可以在其中向数据库注册时间表。Iv'e使用实体框架进行CRUD操作,但每次我试图编辑一条记录时,我都会看到标题上的错误 下面是一些代码: 型号:C# Store update、insert或delete语句影响了实体框架中意外的行数(0),c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,因此,我正在构建一个时间表应用程序,用户可以在其中向数据库注册时间表。Iv'e使用实体框架进行CRUD操作,但每次我试图编辑一条记录时,我都会看到标题上的错误 下面是一些代码: 型号: namespace Aviato.Models { using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; pub
namespace Aviato.Models
{
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
public partial class TimesheetEntry
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int UserId { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(50)]
public string ProjectId { get; set; }
[Key]
[Column(Order = 2, TypeName = "date")]
public DateTime EntryDate { get; set; }
public decimal HoursWorked { get; set; }
public virtual Project Project { get; set; }
public virtual User User { get; set; }
}
}
ViewModel(不知道我是否真的需要):
视图(索引):
数据库:
CREATE TABLE [dbo].[TimesheetEntries] (
[UserId] INT NOT NULL,
[ProjectId] NVARCHAR (50) NOT NULL,
[EntryDate] DATE NOT NULL,
[HoursWorked] DECIMAL (8, 1) CONSTRAINT [DF_TimesheetEntries_HoursWorked] DEFAULT ((0.0)) NOT NULL,
CONSTRAINT [PK_TimesheetEntries] PRIMARY KEY CLUSTERED ([UserId] ASC, [ProjectId] ASC, [EntryDate] ASC),
CONSTRAINT [FK_TimesheetEntries_Users] FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([UserId]),
CONSTRAINT [FK_TimesheetEntries_Projects] FOREIGN KEY ([ProjectId]) REFERENCES [dbo].[Projects] ([ProjectId])
);
我认为您不能将UserId传递给Edit操作,您可以直接将TimesheetEntryModel传递给Edit操作
@model IEnumerable<Aviato.Models.TimesheetEntry>
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Tidrapportering</h1>
<p>
@Html.ActionLink("Skapa ny", "Create")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserId)
</th>
<th>
@Html.DisplayNameFor(model => model.Project.ProjectName)
</th>
<th>
@Html.DisplayNameFor(model => model.EntryDate)
</th>
<th>
@Html.DisplayNameFor(model => model.HoursWorked)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Project.ProjectName)
</td>
<td>
@Html.DisplayFor(modelItem => item.EntryDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.HoursWorked)
</td>
<td>
@Html.ActionLink("Redigera", "Edit", new { id=item.UserId, item.ProjectId, item.EntryDate, item.HoursWorked }) |
@Html.ActionLink("Ta bort", "Delete", new { id=item.UserId, item.ProjectId, item.EntryDate, item.HoursWorked })
</td>
</tr>
}
</table>
<div>
@Html.ActionLink("Tillbaka", "Index", "User")
</div>
@model Aviato.ViewModel.TimesheetEntryModel
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Redigera</h1>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<hr />
@Html.ValidationSummary(true)
@Html.HiddenFor(model => model.UserId)
<div class="form-group">
@Html.LabelFor(model => model.ProjectId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.ProjectId, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.ProjectId)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.EntryDate, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.EntryDate, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.EntryDate)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.HoursWorked, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.HoursWorked, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.HoursWorked)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Spara" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Tillbaka", "Index")
</div>
namespace Aviato.Controllers
{
public class TimesheetEntryController : Controller
{
private readonly AviatoModel _db = new AviatoModel(); //Database Model.
public ActionResult Index()
{
var userId = (int)Session["userId"];
var timesheetentries = _db.TimesheetEntries.Where(t => t.UserId == userId).ToList();
return View(timesheetentries);
}
public ActionResult Edit(int id, string projectId, decimal hoursWorked, string entryDate)
{
var timesheetEntryModel = new TimesheetEntryModel();
timesheetEntryModel.UserId = id;
timesheetEntryModel.ProjectId = projectId;
timesheetEntryModel.EntryDate = entryDate;
timesheetEntryModel.HoursWorked = hoursWorked;
ViewBag.ProjectId = new SelectList(_db.Projects, "ProjectId", "ProjectName", timesheetEntryModel.ProjectId);
ViewBag.UserId = new SelectList(_db.Users, "UserId", "SocialSecurityNumber", timesheetEntryModel.UserId);
return View(timesheetEntryModel);
}
[HttpPost]
public ActionResult Edit(TimesheetEntry timesheetentry)
{
_db.Entry(timesheetentry).State = EntityState.Modified;
_db.SaveChanges();
ViewBag.ProjectId = new SelectList(_db.Projects, "ProjectId", "ProjectName", timesheetentry.ProjectId);
ViewBag.UserId = new SelectList(_db.Users, "UserId", "SocialSecurityNumber", timesheetentry.UserId);
return RedirectToAction("Index");
}
CREATE TABLE [dbo].[TimesheetEntries] (
[UserId] INT NOT NULL,
[ProjectId] NVARCHAR (50) NOT NULL,
[EntryDate] DATE NOT NULL,
[HoursWorked] DECIMAL (8, 1) CONSTRAINT [DF_TimesheetEntries_HoursWorked] DEFAULT ((0.0)) NOT NULL,
CONSTRAINT [PK_TimesheetEntries] PRIMARY KEY CLUSTERED ([UserId] ASC, [ProjectId] ASC, [EntryDate] ASC),
CONSTRAINT [FK_TimesheetEntries_Users] FOREIGN KEY ([UserId]) REFERENCES [dbo].[Users] ([UserId]),
CONSTRAINT [FK_TimesheetEntries_Projects] FOREIGN KEY ([ProjectId]) REFERENCES [dbo].[Projects] ([ProjectId])
);