C# ASP.NET MVC EF代码优先:无法修改关系

C# ASP.NET MVC EF代码优先:无法修改关系,c#,asp.net-mvc,asp.net-mvc-3,entity-framework,C#,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,当我的代码到达ActivationRepository.saveChanges()时,它会给出一个错误,即关系无法修改,密钥属性不能为null。但是如果我调试它并查看当前对象的内容,所有主键和外键都会被设置。我不知道为什么会出问题 public ActionResult Update(LandingPage update) { Campaign curr = CampaignRepository.FindById(update.CampaignId); c

当我的代码到达ActivationRepository.saveChanges()时,它会给出一个错误,即关系无法修改,密钥属性不能为null。但是如果我调试它并查看当前对象的内容,所有主键和外键都会被设置。我不知道为什么会出问题

public ActionResult Update(LandingPage update)
    {
        Campaign curr = CampaignRepository.FindById(update.CampaignId);
        curr.UpdatePage(update);
        CampaignRepository.SaveChanges();
        return View("Edit", curr);
    }

我的朋友们,我的朋友们 空值的参考值是Toegestan。 想不想和你有关系 参考值为空值。阿尔斯德 参考值为零,但不在参考值范围内,不在参考值范围内 relatie worden gedefinieerd,moet de Referenceële Sleuteleigenshap worden toegewezen和Ander waarde die niet null是moeten het的成员 niet Gerlateerde对象worden verwijderd


更新

我将更新方法更改为:

  public ActionResult Update(LandingPage update)
        {

            Campaign curr = Campaignrepository.FindById(update.CampaignId);
            PageRepository.Remove(update);
            curr.Pages.Remove(update);
            curr.Pages.Add(update);                          
            Campaignrepository.SaveChanges();

            return View("Edit", curr);
        }
但现在它说“无法删除对象,因为在ObjectManager中找不到它”


更新2

仍然“无法删除对象,因为在ObjectManager中找不到它”


必须手动从父类活动中逐个删除旧的子项。实体框架不能做到这一点。您必须决定如何处理旧的子项—将它们扔掉或保持原样,并将它们分配给其他父实体。你必须告诉EF你的决定。没有对数据库中任何父实体的引用,子实体不能单独存在(由于外键约束)

关于异常,“无法删除对象,因为在ObjectManager中找不到它”,要对其进行排序,必须将子对象的外键值设置为0。下面是一个例子。(假设父对象是Campaign myCampaign)

必须这样做。以及您必须使FK id为0

myCampaign.ChildCampaignId = 0;

我在以前的项目中遇到了同样的问题,并且通过同样的方法解决了这个问题。希望这能有所帮助。

您可以尝试更改更新页面方法:

public void UpdatePage(LandingPage update)
{
    var pageToUpdate = this.Pages.Where( p => P.Id == update.Id ).SingleOrDefault();

    if( pageToUpdate != null )
    {   
       // update all properties of old page with new values
       pageToUpdate.Title = update.Title; // for any property of Page
    }
}

希望这有助于[[1]:@Sugandika我现在遇到“无法删除对象,因为在ObjectManager中找不到该对象”。我只有一个上下文,因此没有意义?@Sugandika请不要编辑问题以向OP添加消息。这就是注释的目的。curr.GetLanding()不起作用.Campaign=null;PageRepository.Remove(更新);curr.Pages.Remove(更新);curr.Pages.Add(更新);PageRepository.SaveChanges();一个小说明,在删除'update'对象之前,您能在程序中执行类似操作吗?curr.GetLanding().Campaign=null;curr.GetLanding().Campaign ID=0;我将其设置为null,然后尝试将其从存储库中删除。但在删除时,我仍然收到ObjectManager错误。编辑的操作。如果需要添加更多属性,将需要大量工作><但它可以工作,谢谢。
myCampaign.ChildCampaign = null;
myCampaign.ChildCampaignId = 0;
public void UpdatePage(LandingPage update)
{
    var pageToUpdate = this.Pages.Where( p => P.Id == update.Id ).SingleOrDefault();

    if( pageToUpdate != null )
    {   
       // update all properties of old page with new values
       pageToUpdate.Title = update.Title; // for any property of Page
    }
}