Entity Framework 4 Code First - Виртуальные свойства не обновляются при изменении на ноль - PullRequest
2 голосов
/ 23 августа 2010

Итак, в моем домене есть модель, подобная этой:

public class Product
{
    public virtual Tag Methodology { get; set; }
}

Затем в проекте веб-формы я обновляю ее так:

if (!string.IsNullOrWhiteSpace(ddlMethodology.SelectedValue))
    product.Methodology = TagRepo.GetTagById(int.Parse(ddlMethodology.SelectedValue));
else
    product.Methodology = null;

Но это не обновлялоськогда product.Methodology ранее был установлен на объект, и я хотел изменить его обратно на ничто.Т.е. строка product.Methodology = null; не работает должным образом.

Когда я запустил ее в отладчике, я обнаружил, что иногда она будет работать, а иногда - нет.После небольшого растягивания волос я понял, что это связано с типом прокси, который структура сущностей создавала для этого свойства во время выполнения, и она работала, когда я проверял его в отладчике.

Итак, чтобы исправитьпроблема, я создал этот хак, который хорошо работает: (ПРИМЕЧАНИЕ: теперь else if)

if (!string.IsNullOrWhiteSpace(ddlMethodology.SelectedValue))
    product.Methodology = TagRepo.GetTagById(int.Parse(ddlMethodology.SelectedValue));
else if (product.Methodology != null)
    product.Methodology = null;

Итак, я думаю, мои вопросы:

  • Я делаю что-то не так?
  • Есть ли еще один способ сделать это, не забывая каждый раз совершать взлом?
  • Может ли это быть ошибкой в ​​CTP-коде сущностного кода первого CTP?

Ура,
Чарльз

...