【发布时间】:2017-01-26 19:41:13
【问题描述】:
我在使用 EntityState.Modified 更新我的模型之一时遇到了问题,因为它还尝试更新我的导航属性(我没有更改)。我的控制器操作是:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Rooms([Bind(Include = "ID,BedroomCount,BedroomsDescription,BathroomCount,BathroomsDescription")] Property property)
{
if (ModelState.IsValid)
{
//Modify property
property.DateModified = DateTime.Now;
property.Status = 1;
db.Entry(property).State = EntityState.Modified;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(property);
}
我的模型看起来像:
public class Property
{
public int ID { get; set; }
public Int16 BedroomCount { get; set; }
public string BedroomsDescription { get; set; }
public Int16 BathroomCount { get; set; }
public string BathroomsDescription { get; set; }
public int CommunityID { get; set; }
public int PropertyTypeID { get; set; }
public virtual Community Community { get; set; }
public virtual PropertyType PropertyType { get; set; }
}
如您所见,我从我的 viewModel 中绑定了一堆东西(浴室和卧室数量等),但我根本没有修改导航属性“社区”,但每当我发布到这个操作方法时,我都会得到以下错误:
UPDATE 语句与 FOREIGN KEY 约束冲突 “FK_dbo.Property_dbo.Community_CommunityID”。冲突发生在 数据库“MyDatabase”,表“dbo.Community”,列“ID”。这 语句已终止。
如何在不尝试更新外键的情况下更新此模型?我在任何地方都找不到答案
【问题讨论】:
-
我现在也面临这个问题,我使用 property.Community = null 解决了它。我知道这不是永久修复,但我也找不到答案
-
是的,不幸的是我不希望我的社区为空。现在我也可以从我的视图模型中传递它,但这似乎真的没有必要,因为我不需要更改它
-
是的,就我而言,我正在从我的实体特定的数据访问中更新我的实体,所以我可以知道更新 child 的调用无法到达那里。
标签: c# asp.net asp.net-mvc entity-framework