Entity Framework - Actualizar modelo desde la base de datos ... ¡no se realiza ninguna actualización!

.net entity-framework updatemodel

Pregunta

Tengo una tabla en mi base de datos llamada CompanyDetails . Tiene una columna llamada CharacterID varchar(255) . Acabo de cambiarlo de una columna NOT NULL a una columna NULL . Ejecuté el comando 'Actualizar modelo de base de datos ...' en el navegador del modelo, así como en el visor de archivos EDMX. Esto es lo que creó en el diseñador:

/// <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();

Notarás que tiene un atributo de:

[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute(IsNullable=false)]

También incluí la siguiente propiedad y te darás cuenta de que está marcada correctamente como:

[global::System.Data.Objects.DataClasses.EdmScalarPropertyAttribute()]

¿Lo que da? ¿Cómo puedo realizar cambios simples en mi esquema de base de datos y realmente hacer que Entity Framework se actualice en función de esos cambios? ¡He tenido que soltar y recrear el modelo cada vez que hubo un cambio!

Respuesta aceptada

El marco de la entidad utiliza un archivo XML (edmx) para especificar el esquema y la asignación de la base de datos. Cuando hace clic en "actualizar el modelo de la base de datos", este archivo edmx se actualiza.

A continuación, cuando compila su aplicación, se analiza este archivo edmx y se generan las clases de respaldo que está viendo, por lo que si desea ver el cambio reflejado en las clases de respaldo, debe actualizar el modelo y luego compilarlo.

Finalmente, también debes recordar que el edmx contiene 3 cosas.

  1. La base de datos / esquema de almacenamiento (SSDL)
  2. El modelo conceptual (CSDL)
  3. El mapeo entre conceptual y almacenamiento (MSL)

Actualizar la base de datos y hacer clic en "actualizar" actualizará el SSDL, pero no necesariamente realizará los cambios necesarios automáticamente en el modelo conceptual, es posible que deba abrir edmx, el diseñador y verificar las propiedades en el campo. (Es totalmente posible tener un campo de base de datos anulable asignado a un campo conceptual no anulable, pero obviamente en este caso no es lo que quiere).



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué