Asp.net mvc 使用实体密钥伪造外键更新
顺便说一句,这是他所说的。这似乎正是我所需要的,但无论出于什么原因,我似乎无法在更新时完成它。我的控制器的更新部分中有以下内容:Asp.net mvc 使用实体密钥伪造外键更新,asp.net-mvc,entity-framework,asp.net-3.5,Asp.net Mvc,Entity Framework,Asp.net 3.5,顺便说一句,这是他所说的。这似乎正是我所需要的,但无论出于什么原因,我似乎无法在更新时完成它。我的控制器的更新部分中有以下内容: [AcceptVerbs(HttpVerbs.Post)] public ActionResult Edit(candidates candidateToEdit) { string EduIDValue = candidateToEdit.education.ID.ToString(); if (!ModelStat
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(candidates candidateToEdit)
{
string EduIDValue = candidateToEdit.education.ID.ToString();
if (!ModelState.IsValid)
return View();
try
{
var originalCandidate = (from c
in model.candidates
where c.ID == candidateToEdit.ID select c).FirstOrDefault();
//attempting it here
originalCandidate.educationReference.EntityKey = new System.Data.EntityKey("model.education", "ID", candidateToEdit.education.ID);
model.ApplyPropertyChanges(originalCandidate.EntityKey.EntitySetName, candidateToEdit);
model.SaveChanges();
return RedirectToAction("Index");
}
catch(Exception e)
{
Response.Write("Education ID Value " + EduIDValue + "<br /><br />Error: <br /><br />" + e);
return null;
//return View();
}
}
[AcceptVerbs(HttpVerbs.Post)]
公共行动结果编辑(候选人候选资格编辑)
{
字符串EduIDValue=candidateToEdit.education.ID.ToString();
如果(!ModelState.IsValid)
返回视图();
尝试
{
var originalCandidate=(来自c
在模特儿中
其中c.ID==candidateToEdit.ID选择c).FirstOrDefault();
//在这里尝试
originalCandidate.educationReference.EntityKey=new System.Data.EntityKey(“model.education”、“ID”、candidateToEdit.education.ID);
model.ApplyPropertyChanges(originalCandidate.EntityKey.EntitySetName,candidateToEdit);
model.SaveChanges();
返回操作(“索引”);
}
捕获(例外e)
{
响应。写入(“教育ID值”+EduIDValue+”
错误:
+e);
返回null;
//返回视图();
}
}
这样做失败,并会产生以下结果:
System.ArgumentException:元数据集合中不存在标识为“model”的成员。参数名称:System.Data.Metadata.Edm.MetadataCollection1.GetValue(字符串标识,布尔ignoreCase)at System.Data.Metadata.Edm.ReadOnlyMetadataCollection
1.GetValue(字符串标识,布尔ignoreCase)at System.Data.Metadata.Edm.ItemCollection.GetEntityContainer(字符串名称,布尔ignoreCase)位于System.Data.Metadata.Edm.ItemCollection.GetEntityContainer(字符串名称)处的System.Data.Metadata.Edm.MetadataWorkspace.GetEntityContainer(字符串名称,数据空间数据空间)处的System.Data.EntityKey.GetEntitySet(MetadataWorkspace MetadataWorkspace)处的System.Data.Objects.DataClasses.EntityReference.set\U EntityKey(EntityKey值)在C:\Documents and Settings\graham\My Documents\Visual Studio 2008\Projects\InternshipTest\InternshipTest\InternshipTest\Controllers\CandidatesController.Edit(candidates CandidatesToEdit)中编辑(candidates CandidatesToEdit):第84行
这对我来说没有任何意义,model绝对是EntitySet的名称。我发现了,事实上我的EntitySet不正确。在创建新实体键时,我通过将以下参数作为第一个参数来绕过它:
originalCandidate.educationReference.EntityKey = new System.Data.EntityKey(originalCandidate.educationReference.EntityKey.EntityContainerName + "." + originalCandidate.educationReference.EntityKey.EntitySetName, "ID", candidateToEdit.education.ID);
有点恶心,但它有效。
期待在.net 4.0中整理EF中的外键混乱很高兴您喜欢这个系列。顺便说一句,我刚刚修复了博客文章中的空引用异常错误。