Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.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
Entity framework 4 “获取异常”;无法更改关系,因为一个或多个外键属性不可为null;更新实体时_Entity Framework 4_Entity Framework 4.1_Asp.net Mvc 4_Entity Framework 5_Asp.net Mvc 3 Areas - Fatal编程技术网

Entity framework 4 “获取异常”;无法更改关系,因为一个或多个外键属性不可为null;更新实体时

Entity framework 4 “获取异常”;无法更改关系,因为一个或多个外键属性不可为null;更新实体时,entity-framework-4,entity-framework-4.1,asp.net-mvc-4,entity-framework-5,asp.net-mvc-3-areas,Entity Framework 4,Entity Framework 4.1,Asp.net Mvc 4,Entity Framework 5,Asp.net Mvc 3 Areas,我有以下几种型号 public class Site { public int Id { get; set; } public string SiteName { get; set; } public string SiteUrl { get; set; } public IEnumerable<SiteBrand> SiteBrands { get; set; } } public class SiteBrand { public int

我有以下几种型号

public class Site
{
    public int Id { get; set; }
    public string SiteName { get; set; }
    public string SiteUrl { get; set; }
    public IEnumerable<SiteBrand> SiteBrands { get; set; }
}

public class SiteBrand
{
    public int Id { get; set; }
    public int SiteId { get; set; }
    public int BrandId { get; set; }
    public SiteConfiguration SiteConfiguration { get; set; }
}
但上面的代码引发了以下异常

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

我想我之所以会出现这个错误,是因为我试图在不清除现有外键条目的情况下更新我的站点实体。我不知道这是否正确,也不知道如何解决这个问题。有人能帮我吗


感谢

问题在于您没有为SiteId外键分配值,因此它将以null(您的DB关系不允许)的形式发送到DB。尝试将代码更改为:

itemToUpdate.SiteBrands = item.SelectedBrands
                              .Select(br => new DataEntities.Siteconfig.SiteBrand
                                            {
                                                SiteId = item.Id,
                                                BrandId = br
                                            }).ToList();

如果删除
itemToUpdate.SiteBrands=item.SelectedBrands…
或将其更改为
itemToUpdate.SiteBrands=item.SelectedBrands,是否有效
itemToUpdate.SiteBrands = item.SelectedBrands
                              .Select(br => new DataEntities.Siteconfig.SiteBrand
                                            {
                                                SiteId = item.Id,
                                                BrandId = br
                                            }).ToList();