2012-06-07 3 views
4

Я не могу получить внешний ключ в моей первой базе данных кода Entity Framework 4.3 для обновления до нуля.Entity Framework не будет обновлять значение внешнего ключа до нуля

мой взгляд модель:

public class AccountViewModel 
{ 
    public int Id { get; set; } 
    public int? CorporationId { get; set; } 
    public CorporationModel Corporation { get; set; } 
} 

var corporation = db.Corporation.Where(x => x.Id == model.CorporationId).FirstOrDefault(); // shows as null 
account.Corporation = corporation; // sets the value to null 

db.Entry(account).State = EntityState.Modified; 
db.SaveChanges(); // does not save the null value in the FK field!!! 

Любая помощь будет принята с благодарностью.

+0

Значение db допускает нулевые записи? Думаю, но, но думаю, я бы спросил – DevDave

+0

да, да. это так озадачивает меня! – jallen

+0

также, если это внешний ключ, то он должен указывать на значение в другой таблице, верно? не уверены, соответствует ли значение nullables? – DevDave

ответ

8

Вы должны установить для свойства внешнего ключа значение null. Установка состояния в Modified влияет только на скалярные свойства (и ключевым свойством иностранного является одним из них, но не свойство навигации):

account.CorporationId = null; 

db.Entry(account).State = EntityState.Modified; 
db.SaveChanges(); 

Если у вас нет ключа собственности иностранного на Account необходимо загрузить учетную запись включая корпорацию:

var account = db.Account.Include(a => a.Corporation) 
    .Where(a => a.Id == accountId) 
    .SingleOrDefault(); 

if (account != null) 
{ 
    account.Corporation = null; 
    db.SaveChanges(); 
} 
+0

Я только что понял это, а затем прочитал ваше сообщение! Да, мне пришлось создать модель учетной записи, включив ее в первую очередь. Спасибо! – jallen

+1

@Slauma, спасибо за ответ - у меня возникли проблемы с установкой связанного свойства в null и использованием .Include() решена проблема. Не могли бы вы объяснить, почему это необходимо .Include() связанное свойство, когда все, что мы делаем, устанавливает его в null? Извините, что выкопал старую тему. –

+0

Я знаю, что «спасибо» не принято в качестве комментария. Но спасибо! –

Смежные вопросы