0

我有以下型号。

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

SiteBrand 在 Site 的 SiteId 上有一个外键。

我正在尝试以这种方式更新我的站点实体。

public bool Update(Site item)
{
    try
    {
        if (item == null)
            return false;

        var itemToUpdate =
            _dbContext.SiteConfigurations.FirstOrDefault(ua => ua.Id == item.Id);

        if (itemToUpdate == null)
            return false;

        itemToUpdate.SiteName = item.SiteName;

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

        _dbContext.SaveChanges(); // Save changes.

        return true;
    }
    catch (Exception e)
    {
        throw new Exception(e.Message);
    }
}

但是上面的代码抛出了以下异常。

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

我认为我收到此错误是因为我试图在不清除现有外键条目的情况下更新我的站点实体。我不确定它是否正确,也不知道如何解决这个问题。有人可以帮我吗?

谢谢

4

1 回答 1

0

问题是您没有为您的 SiteId 外键分配值,因此它将作为空值发送到数据库(您的数据库关系不允许)。尝试将您的代码更改为:

itemToUpdate.SiteBrands = item.SelectedBrands
                              .Select(br => new DataEntities.Siteconfig.SiteBrand
                                            {
                                                SiteId = item.Id,
                                                BrandId = br
                                            }).ToList();
于 2012-11-25T11:34:41.843 回答