實體框架 - 從數據庫更新模型... - 沒有更新發生!

.net entity-framework updatemodel

我的數據庫中有一個名為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()]

是什麼賦予了?如何在我的數據庫模式中進行簡單的更改,並根據這些更改真正獲得要更新的實體框架?!每次發生變化時,我都不得不放棄並重新創建模型!

一般承認的答案

實體框架使用XML文件(edmx)來指定數據庫方案和映射。單擊“從數據庫更新模型”時,將更新此edmx文件。

接下來,在編譯應用程序時,將解析此edmx文件並生成您正在查看的支持類,因此,如果要查看支持類中反映的更改,則需要更新模型,然後重新編譯。

最後,您還必須記住edmx包含3件事。

  1. 數據庫/存儲方案(SSDL)
  2. 概念模型(CSDL)
  3. 概念和存儲(MSL)之間的映射

更新數據庫並單擊“更新”將更新SSDL,但不一定會自動對概念模型進行必要的更改,您可能需要打開edmx是設計器並檢查字段上的屬性。 (完全可以將可空的數據庫字段映射到不可為空的概念字段,但顯然在這種情況下不是您想要的)。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因