2011-05-11 15 views
6

Necesitaba extender mis clases parciales EF, porque quiero agregar algunas funcionalidades para poder usar las secuencias de Oracle, sin embargo, realmente no sé cómo usar esta clase parcial, hecho un archivo .cs independiente y el nombre como una de mis clases generadas automáticamente de la siguiente manera:EF 4, cómo agregar clases parciales

namespace GlassStoreDAL 
{ 
    public partial class CAR 
    { 
     private int _sequences; 
     public int sequences 
     { 
      get { return _sequences; } 
      set { _sequences = value; } 
     } 
    } 
} 

Ahora supone que, en mi BLL - que hace referencia a GlassStoreDAL - puedo encontrar mi propiedad "secuencias", pero aparentemente algo va mal, agradecería cualquier ayuda aquí.

Aquí está mi clase parcial generada, ¿debería tener la propiedad de secuencias también allí?

[EdmEntityTypeAttribute(NamespaceName="Model", Name="CAR")] 
[Serializable()] 
[DataContractAttribute(IsReference=true)] 
public partial class CAR : EntityObject 
{ 
    #region Factory Method 
    /// <summary> 
    /// Create a new CAR object. 
    /// </summary> 
    /// <param name="id">Initial value of the ID property.</param> 
    public static CAR CreateCAR(global::System.Decimal id) 
    { 
     CAR cAR = new CAR(); 
     cAR.ID = id; 
     return cAR; 
    } 

    #endregion 
    #region Primitive Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=true, IsNullable=false)] 
    [DataMemberAttribute()] 
    public global::System.Decimal ID 
    { 
     get 
     { 
      return _ID; 
     } 
     set 
     { 
      if (_ID != value) 
      { 
       OnIDChanging(value); 
       ReportPropertyChanging("ID"); 
       _ID = StructuralObject.SetValidValue(value); 
       ReportPropertyChanged("ID"); 
       OnIDChanged(); 
      } 
     } 
    } 

    private global::System.Decimal _ID; 
    partial void OnIDChanging(global::System.Decimal value); 
    partial void OnIDChanged(); 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)] 
    [DataMemberAttribute()] 
    public global::System.String NAME 
    { 
     get 
     { 
      return _NAME; 
     } 
     set 
     { 
      OnNAMEChanging(value); 
      ReportPropertyChanging("NAME"); 
      _NAME = StructuralObject.SetValidValue(value, true); 
      ReportPropertyChanged("NAME"); 
      OnNAMEChanged(); 
     } 
    } 

    private global::System.String _NAME; 
    partial void OnNAMEChanging(global::System.String value); 
    partial void OnNAMEChanged(); 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)] 
    [DataMemberAttribute()] 
    public global::System.String MODEL 
    { 
     get 
     { 
      return _MODEL; 
     } 
     set 
     { 
      OnMODELChanging(value); 
      ReportPropertyChanging("MODEL"); 
      _MODEL = StructuralObject.SetValidValue(value, true); 
      ReportPropertyChanged("MODEL"); 
      OnMODELChanged(); 
     } 
    } 

    private global::System.String _MODEL; 
    partial void OnMODELChanging(global::System.String value); 
    partial void OnMODELChanged(); 

    #endregion 

    #region Navigation Properties 

    /// <summary> 
    /// No Metadata Documentation available. 
    /// </summary> 
    [XmlIgnoreAttribute()] 
    [SoapIgnoreAttribute()] 
    [DataMemberAttribute()] 
    [EdmRelationshipNavigationPropertyAttribute("Model", 
     "SYS_C009618", "GLASS")] 
    public EntityCollection<GLASS> GLASSes 
    { 
     get 
     { 
      return ((IEntityWithRelationships)this).RelationshipManager. 
       GetRelatedCollection<GLASS>("Model.SYS_C009618", "GLASS"); 
     } 
     set 
     { 
      if ((value != null)) 
      { 
       ((IEntityWithRelationships)this).RelationshipManager. 
        InitializeRelatedCollection<GLASS>("Model.SYS_C009618", 
         "GLASS", value); 
      } 
     } 
    } 

    #endregion 
} 
+0

¿Ambos parciales están en el mismo conjunto? – forsvarir

+0

sí, si quiere decir con el mismo ensamblado, el mismo proyecto DLL – Musaab

+0

Ambas clases se declaran como parciales/en el mismo espacio de nombres? – forsvarir

Respuesta

9

Para resumir la gran pista de comentario ...

Compruebe que los parciales están unidos entre sí correctamente:

  • asegurarse de que tanto las definiciones de clase están en el mismo espacio de nombres y de reunión.
  • Asegúrese de que al menos uno de ellos se declara como parcial (la mayoría de las clases generadas son, incluidas las generadas por EF).
  • Compruebe para asegurarse de que el parcial creado recientemente pueda ver a los miembros anteriores, para confirmar que los parciales coinciden.

Cuando el cliente se encuentra en un binario diferente (como fue el caso aquí)

  • Asegúrese de que los proyectos de los clientes binaria/referencias están al día (realizar una compilación limpia/eliminar la copia binaria/recrear la referencia), dependiendo de la situación de su proyecto.

Para este caso, el último control fue el más importante y resolvió el problema.

+0

Considerando que este comentario puede ser solo comentarios y no una respuesta real, con solo un error tipográfico. Teniendo en cuenta el error es esto, con un genio de hacer clic en el botón hacia abajo. –

+6

@Peyton Crow: Tengo que ser honesto, no entiendo tu comentario ... – forsvarir

+1

@Peyton Crow: Es bastante ridículo teniendo en cuenta que resolvió el problema. – razlebe

6

Usted debe asegurarse de que:

public partial class CAR 
{ 
    private int _sequences; 
    public int sequences 
    { 
     get { return _sequences; } 
     set { _sequences = value; } 
    } 
} 

En su clase de EF generada se requiere que:

public partial class CAR 
{ 
} 
  1. Agregar palabra clave parcial para la clase generada EF.
  2. Asegúrate de que residan en el mismo espacio de nombres.
+1

@Peyton Crow: Debes eliminar la información de las secuencias de tu clase * generada * EF ... hace que parezca que tienes que volver a implementar la propiedad en el código generado ... – forsvarir

+0

Acabo de eliminarlo ahora, gracias por el recordatorio, es un poco confuso como respuesta. –

+0

@Peyton Crow: He eliminado mi -1, ahora que ha eliminado el código engañoso. – forsvarir

1

Crear una nueva clase en un archivo separado en el mismo conjunto (aunque no tiene por qué ser el mismo conjunto) y asegúrese de que tiene el mismo espacio de nombres.

Si ambos están en el mismo ensamblado y espacio de nombres, no debería haber ningún problema. Sabrá que lo hizo bien cuando el nuevo parcial que ha creado puede ver las propiedades y métodos de la clase de EF generada en el menú desplegable en la parte superior del editor de código fuente.

+0

oh sí, así es, puedo ver otras propiedades en el editor, el problema debe estar en cómo trato de referenciarlo en mi BLL – Musaab

+0

GlassStoreDAL.CAR newCar = new CAR(); nuevoCar. así es como lo estoy haciendo en mi BLL, puedo ver todas las propiedades pero las "secuencias" una – Musaab

+0

@Musaab: pregunta estúpida, pero * estás * seguro de que no está allí y no es solo que intellisense no ha atrapado ¿arriba todavía? – forsvarir