Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用实体密钥伪造外键更新_Asp.net Mvc_Entity Framework_Asp.net 3.5 - Fatal编程技术网

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.MetadataCollection
1.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中的外键混乱

很高兴您喜欢这个系列。顺便说一句,我刚刚修复了博客文章中的空引用异常错误。