Entity Framework - обновить модель из базы данных... - обновление не происходит!
У меня есть таблица в моей БД под названием CompanyDetails
. Он имеет столбец под названием CharacterID varchar(255)
. Я просто изменил его из столбца NOT NULL
в столбец NULL
. Я запустил команду "Обновить модель из базы данных..." в браузере модели, а также в средстве просмотра файлов EDMX. Это то, что он создал в дизайнере:
/// <summary>
/// There are no comments for Property CharacterId in the schema.
/// </summary>
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public string CharacterId
{
get
{
return this._CharacterId;
}
set
{
this.OnCharacterIdChanging(value);
this.ReportPropertyChanging("CharacterId");
this._CharacterId = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, false);
this.ReportPropertyChanged("CharacterId");
this.OnCharacterIdChanged();
}
}
private string _CharacterId;
partial void OnCharacterIdChanging(string value);
partial void OnCharacterIdChanged();
/// <summary>
/// There are no comments for Property URLDomain in the schema.
/// </summary>
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
[global::System.Runtime.Serialization.DataMemberAttribute()]
public string URLDomain
{
get
{
return this._URLDomain;
}
set
{
this.OnURLDomainChanging(value);
this.ReportPropertyChanging("URLDomain");
this._URLDomain = global::System.Data.Objects.DataClasses.StructuralObject.SetValidValue(value, true);
this.ReportPropertyChanged("URLDomain");
this.OnURLDomainChanged();
}
}
private string _URLDomain;
partial void OnURLDomainChanging(string value);
partial void OnURLDomainChanged();
Вы заметите, что он имеет атрибут:
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]
Я также включил следующее свойство, и вы заметите, что оно правильно отмечено как:
[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]
Что дает? Как я могу сделать простые изменения в моей схеме БД и действительно получить Entity Framework для обновления на основе этих изменений?! Мне пришлось отбросить и воссоздать модель каждый раз, когда произошли изменения!
Ответы
Ответ 1
Структура сущности использует XML файл (edmx) для указания схемы и сопоставления базы данных. Когда вы нажимаете "обновить модель из базы данных", обновляется этот файл edmx.
Затем, когда вы компилируете свое приложение, этот файл edmx анализируется, и создаются классы поддержки, на которые вы смотрите, поэтому, если вы хотите увидеть изменение, отраженное в базовых классах, вам необходимо обновить модель, а затем перекомпилировать.
Наконец, вы также должны помнить, что edmx содержит 3 вещи.
- Схема базы данных/хранилища (SSDL)
- Концептуальная модель (CSDL)
- Отображение между концептуальным и хранилищем (MSL)
Обновление базы данных и нажатие "update" обновит SSDL, но не обязательно автоматически внесет необходимые изменения в концептуальную модель, вам может потребоваться открыть edmx - это дизайнер и проверить свойства в этом поле. (Вполне возможно, чтобы поле базы данных с нулевыми значениями отображалось в концептуальное поле, отличное от нуля, но, очевидно, в этом случае это не то, что вы хотите).