2013-03-14 81 views
0

我想设置的外键“空” ..使用SQL Management Studio中它工作正常,但使用C#尝试它,我得到一个例外:C#MVC EF - 将外键设置为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; } 
} 

谁能帮助我吗?如何修改我的模型以使我的外键可以为空?感谢提前:)

+0

看着你的代码和错误消息,似乎abteilungObjekt或etageObjekt是空的,所以当你使用_db.Entry(entity.Abteilung).State或下一个语句是什么导致错误。 – 2013-03-14 11:25:20

+0

是的,没错,但它必须是空的。我想将它设置为null – Jannik 2013-03-14 11:48:32

回答

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当您尝试将其分配到的实体可以为空。在引用类型上使用FirstOrDefault()时,应始终执行空值检查。

+0

在FirstOrDefault之后它们可以为null的机会正是我想要的。并非每个用户(Benutzer)都必须有一个部分(Abteilung),它可以随意分配。 – Jannik 2013-03-14 11:38:59

+0

看到更新,这应该给你这个逻辑。 – Oliver 2013-03-14 11:49:14

+0

如果FK不为空,那么这段代码只会改变某些内容,但我想将null-Value添加到数据库而不是放弃更改:) – Jannik 2013-03-14 11:54:12

1

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