Entity framework 无法更改关系,因为更新时一个或多个外键属性不可为null

Entity framework 无法更改关系,因为更新时一个或多个外键属性不可为null,entity-framework,entity-framework-5,entity-relationship,Entity Framework,Entity Framework 5,Entity Relationship,我在更新模型时遇到一些问题。这是我的更新代码: public void Update(Class @class) { var updatedClass = context.Classes.Where(c => c.ClassId == @class.ClassId).FirstOrDefault(); updatedClass.ClassPriceTypeId = @class.ClassPriceTypeId; updatedClass.ClassType = @

我在更新模型时遇到一些问题。这是我的更新代码:

public void Update(Class @class)
{
    var updatedClass = context.Classes.Where(c => c.ClassId == @class.ClassId).FirstOrDefault();
    updatedClass.ClassPriceTypeId = @class.ClassPriceTypeId;
    updatedClass.ClassType = @class.ClassType;
    updatedClass.Name = @class.Name;
    updatedClass.Title = @class.Title;
    updatedClass.MetaTag = @class.MetaTag;
    updatedClass.MetaDescription = @class.MetaDescription;
    updatedClass.UrlSafe = @class.UrlSafe;
    updatedClass.Header = @class.Header;
    updatedClass.Margin = @class.Margin;
    updatedClass.ImageName = @class.ImageName;
    updatedClass.GroupId = @class.GroupId;
    updatedClass.IsPublished = @class.IsPublished;
    context.SaveChanges();
}
第一个问题是,我将
LazyLoadingEnabled=false
设置为,但在获取
updateClass
之后,像
Group
这样的关系属性不为null

第二个问题是,在一些
@class
对象中,我可以轻松地更新实体,但在其他一些对象中,我看到了以下错误:

操作失败:无法更改关系,因为 一个或多个外键属性不可为空。当 对关系进行更改时,相关的外键属性为 设置为空值。如果外键不支持空值, 必须定义新关系,外键属性必须为 指定了另一个非空值,或者必须为不相关的对象 删除

更新

这是
型号:

public class Class
{
    public int ClassId { get; set; }
    public int GroupId { get; set; }
    public int ClassPriceTypeId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public string MetaTag { get; set; }
    public string MetaDescription { get; set; }
    public string UrlSafe { get; set; }
    public string Header { get; set; }
    public string ImageName { get; set; }
    public int Margin { get; set; }
    public string ClassType { get; set; }
    public bool IsPublished { get; set; }
    public virtual Group Group { get; set; }
    public virtual List<Product> Products { get; set; }
    public virtual List<Comparing.Model.Price.Price > Prices { get; set; }
    public virtual ClassPriceType.ClassPriceType ClassPriceType { get; set; }
    public virtual List<Garanty> Garanties { get; set; }
    public virtual List<PhoneModel> PhoneModels { get; set; }
    public virtual List<ClassPartner> ClassPartners { get; set; }
    public virtual List<Content> Contents { get; set; }
}
public class Group
{
    public int GroupId { get; set; }
    public int SectionId { get; set; }
    public string Name { get; set; }
    public string Title { get; set; }
    public string MetaTag { get; set; }
    public string MetaDescription { get; set; }
    public string UrlSafe { get; set; }
    public string Header { get; set; }
    public string ImageName { get; set; }
    public bool IsPublished { get; set; }
    public virtual Section Section { get; set; }
    public virtual List<Class> Classes { get; set; }
}

有人能帮我解决这个问题吗?

我想,您正在尝试更新一个主键字段,该字段与具有not null约束的其他外键有关系。我想您需要使用更新级联。

显示
类和
类。您是否碰巧使
属性为空?尝试放置context.Configuration.ProxyCreationEnabled=false
在方法的开头,我的上下文中有以下行:base.Configuration.LazyLoadingEnabled=false;base.Configuration.ProxyCreationEnabled=false;base.Configuration.ValidateOnSaveEnabled=false;但是它还不能工作。我能想到的唯一原因是它是一个代理,不知何故,
被设置为null,如果代理被禁用,这应该得到解决,您将配置放在哪里?关于无参数构造函数?或者有另一个构造函数?配置在我的上下文类构造函数中。如果不更新主键值,我想它会成功。当我更新@class对象时,我在Html.HiddenFor(model=>mode.ClassId)中传递旧的主键。我不更改主键及其自动增量。groupId是否有可能变为null?不。groupId和其他键根本不会变为null!