C#MVC EF - 将外键设置为NULL?

时间:2013-03-14 11:21:55

标签: c# asp.net-mvc entity-framework foreign-keys code-first

我正在尝试将外键设置为“Null”。使用SQL Management Studio它工作正常,但使用C#尝试它,我得到一个例外:

例外:

  

值不能为空。参数名称:entity。

代码:

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

任何人都可以帮助我吗?如何修改我的模型以使我的外键可以为空?在此先感谢:)

2 个答案:

答案 0 :(得分:1)

在您的模型中,充当您的FK的ID应为int?,以使其可以为空。

答案 1 :(得分: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()时,应始终执行空检查。