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

しかし、上記のコードは次の例外をスローしています。

操作が失敗しました:1つ以上の外部キープロパティがnull許容でないため、関係を変更できませんでした。リレーションシップに変更が加えられると、関連する外部キープロパティがnull値に設定されます。外部キーがnull値をサポートしていない場合は、新しい関係を定義するか、外部キープロパティに別の非null値を割り当てるか、関連のないオブジェクトを削除する必要があります。

既存の外部キーエントリをクリアせずにサイトエンティティを更新しようとしているため、このエラーが発生していると思います。それが正しいかどうかもわかりませんし、この問題を解決する方法もわかりません。誰かがこれについて私を助けることができますか?

ありがとう

4

1 に答える 1

0

問題は、SiteId外部キーに値を割り当てていないため、nullとしてDBに送信されることです(DB関係では許可されていません)。コードを次のように変更してみてください。

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