2013-03-14 57 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?以使其可以爲空。