由于一个或多个外键属性在更新时不可为空,因此无法更改关系

时间:2014-09-06 06:52:11

标签: 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 = @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但是在获取updatedClass后,Group之类的关系属性不为空。

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

  

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

更新

这是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; }
}

这是Group型号:

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; }
}

任何人都可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

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