2010-02-02 19 views
14

Tengo una tabla en mi DB llamada CompanyDetails. Tiene una columna llamada CharacterID varchar(255). Lo cambié de una columna NOT NULL a una columna NULL. Ejecuté el comando 'Actualizar el modelo desde la base de datos ...' en el navegador de modelos y en el visor de archivos EDMX. Esto es lo que crea en el diseñador:Entity Framework - Actualizar el modelo de la base de datos ... - ¡no ocurre ninguna actualización!

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

Usted se dará cuenta de que tiene un atributo de:

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

También incluí la siguiente propiedad y se dará cuenta de que está marcado correctamente como:

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

¿Qué ocurre? ¿Cómo puedo hacer cambios simples en mi esquema de base de datos y realmente obtener el marco de la entidad para actualizar en función de esos cambios? ¡Tuve que dejar caer y recrear el modelo cada vez que hubo un cambio!

Respuesta

18

entity framework utiliza un archivo XML (el edmx) para especificar el esquema de la base de datos y la asignación. Cuando hace clic en "actualizar modelo desde la base de datos", este es el archivo edmx que se actualiza.

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

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

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

Actualización de la base de datos y "actualizar" clic se Actualice el SSDL pero no realizará necesariamente los cambios necesarios automáticamente en el modelo conceptual, puede que necesite abrir el editor y verifique las propiedades en el campo. (Es completamente posible tener un campo de base de datos anulable mapeado a un campo conceptual no anulable, pero obviamente en este caso eso no es lo que desea).

+0

+1. Esto es correcto. Si ya generó una propiedad en CSDL, debe actualizarla manualmente. Pero el SSDL siempre se regenerará desde cero. EF supone que quieres tus personalizaciones CSDL. –

+4

Gracias Craig. Como nota adicional, creo que puede usar la herramienta edmgen (http://msdn.microsoft.com/en-us/library/bb387165.aspx) con el interruptor/modo: FromSSDLGeneration o/mode: FullGeneration para forzar la generación de CSDL + MSL o todos los bloques, si eso es lo que necesita. –

+0

¿Dónde encuentro estos 3 archivos y los tengo que editar manualmente cada vez que realizo cambios como este? He hecho una búsqueda en mi disco duro y no puedo encontrar estos archivos, así que me pregunto si se generaron internamente, y si es así, ¿cómo los abro? (¡Qué nueva pregunta!) :) –

Cuestiones relacionadas