我首先在 spa 应用程序中使用实体框架代码和 OData 控制器,对于我的复合表(例如:Personnel -> PayRolls),我在具有 NotMapped 属性的部分类中添加了两个属性。因为我稍后会在保存更改时使用它们。我检查记录是否已在客户端被删除或修改以保存在数据库中。
部分类是:
public partial class PayRoll
{
[NotMapped]
public bool IsDirty { get; set; }
[NotMapped]
public bool IsDeleted { get; set; }
}
如果我在加载数据期间未添加 NotMapped 属性,则会出现 sql 异常,显示Invalid column name 'IsDirty'。\r\nInvalid column name 'IsDeleted。所以我添加了 NotMapped 属性以使其了解它们不是数据库的表字段。
但在保存数据期间出现错误,显示:“Template.CodeFirst.PayRoll”类型上不存在“IsDirty”属性。确保仅使用由 type 定义的属性名称。它首先与实体框架数据库(.edmx 文件)一起工作得很好。
oDataController 上的 Put 方法是:
// PUT: odata/Hrm_Personnels(5)
[CheckKey("hrm.Personnels.Edit")]
public IHttpActionResult Put([FromODataUri] int key, Personnel personnel)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (key != personnel.Id)
{
return BadRequest();
}
foreach (var payroll in personnel.PayRolls)
{
if (payroll.IsDirty)
db.Entry(payroll).State = (payroll.ID > 0) ? EntityState.Modified : EntityState.Added;
if (payroll.IsDeleted)
db.Entry(payroll).State = EntityState.Deleted;
}
db.SaveChanges();
db.Entry(personnel).State = EntityState.Modified;
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!PersonnelExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(personnel);
}
提前致谢