0

外部キーを「Null」に設定しようとしています.SQL Management Studioを使用すると正常に動作しますが、C#を使用しようとすると例外が発生します:

例外:

値を null にすることはできません。パラメーター名: エンティティ。

コード:

    var entity = _db.AlleBenutzer.FirstOrDefault(p => p.Id == id);
    if (entity != null)
    {
        var abteilungObjekt = _db.AlleAbteilungen.FirstOrDefault(p => p.Abteilungsname == abteilung);
        var etageObjekt = _db.AlleEtagen.Include(p => p.Abteilung).FirstOrDefault(p => p.Etagenname == etage);
        entity.Abteilung = abteilungObjekt;
        entity.Etage = etageObjekt;
        _db.Entry(entity.Abteilung).State = EntityState.Modified;
        _db.Entry(entity.Etage).State = EntityState.Modified;
        _db.Entry(entity).State = EntityState.Modified;
        _db.SaveChanges();
    }

私の両方のモデルはそのように見えます:(いくつかの部分を切り取ります)

public class Benutzer
{
    public int Id { get; set; }
    public Abteilung Abteilung { get; set; }
    public Etage Etage { get; set; }
}

public class Abteilung
{
    public int Id { get; set; }
    public string Abteilungsname { get; set; }
}

誰でも私を助けることができますか?外部キーを null 可能にできるようにモデルを変更するにはどうすればよいですか? 前もって感謝します :)

4

2 に答える 2

1

モデルでは、FK として機能する ID をint?null 可能にする必要があります。

于 2013-03-14T11:28:48.650 に答える
0

試す:

var entity = _db.AlleBenutzer.FirstOrDefault(p => p.Id == id);
    if (entity != null)
    {
        var abteilungObjekt = _db.AlleAbteilungen.FirstOrDefault(p => p.Abteilungsname == abteilung);
        if (abteilungObjekt != null)
        {
            entity.Abteilung = abteilungObjekt;
            _db.Entry(entity.Abteilung).State = EntityState.Modified;
        }

        var etageObjekt = _db.AlleEtagen.Include(p => p.Abteilung).FirstOrDefault(p => p.Etagenname == etage);
        if (etageObjekt != null)
        {        
            entity.Etage = etageObjekt;
            _db.Entry(entity.Etage).State = EntityState.Modified;
        }

        _db.Entry(entity).State = EntityState.Modified;
        _db.SaveChanges();
    }

エンティティに割り当てようとすると、 abteilungObjekt または etageObjekt のいずれかが null になる可能性があるようです。FirstOrDefault()参照型で使用する場合は、常に null チェックを実行する必要があります。

于 2013-03-14T11:27:37.473 に答える