2011-05-11 4 views
6

Мне нужно было расширить частичные классы EF, потому что я хочу добавить некоторые функциональные возможности, чтобы использовать последовательности Oracle, однако я действительно не знаю, как использовать эту частичную вещь класса, я сделал отдельный .cs файл и назовите его как один из моих автоматически сгенерированных классов следующим образом:EF 4, как добавить частичные классы

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

Теперь я предположил, что, на мой BLL - который ссылается GlassStoreDAL - я могу найти свойство «последовательности», но очевидно, что-то пошло не так, я был бы признателен за любую помощь здесь.

Вот мой сгенерированный частичный класс, должен ли я иметь свойство последовательностей также там?

[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

Обе частицы в одной сборке? – forsvarir

+0

Да, если u означает одну и ту же сборку, тот же проект DLL – Musaab

+0

Оба класса объявлены как частичные/в одном и том же пространстве имен? – forsvarir

ответ

9

Обобщая большой комментарий след ...

Убедитесь, что партиала быть прикреплены друг к другу правильно:

  • Убедитесь, что оба определения класса находятся в том же пространстве имен и сборки.
  • Убедитесь, что хотя бы один из них объявлен как частичный (большинство сгенерированных классов, включая генерируемые EF).
  • Проверьте, чтобы вновь созданные частичные части могли видеть предыдущие элементы, чтобы подтвердить, что частичные элементы совпадают.

Если клиент находится в другой двоичный файл (который в данном случае)

  • Убедитесь, что клиентские проекты бинарное/ссылки до даты (выполнить чистую сборку/удалить бинарную копию/воссоздайте ссылку), в зависимости от ситуации вашего проекта.

Для этого случая последняя проверка была самой важной и решила проблему.

+0

Учитывая этот комментарий, можно просто комментировать, а не фактический ответ, только с ошибкой опечатки. Учитывая ошибку, это с гением нажатия кнопки «вниз». –

+6

@Peyton Crow: Я должен быть честным, я не понимаю ваш комментарий ... – forsvarir

+1

@Peyton Crow: Это довольно смешно, учитывая, что он решил проблему. – razlebe

6

Вы должны убедиться, что:

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

В вашем сгенерированного класса EF вы обязаны:

public partial class CAR 
{ 
} 
  1. Добавить частичное ключевое слово сгенерированного класса EF.
  2. Убедитесь, что они находятся в одном и том же пространстве имен.
+1

@Peyton Crow: вы должны удалить информацию о последовательности из вашего * сгенерированного * класса EF ... это заставляет его выглядеть так, как будто вы должны переопределить свойство в сгенерированном коде ... – forsvarir

+0

Просто удалил его только сейчас, спасибо за напоминание, его немного сбивает с толку как ответ. –

+0

@Peyton Crow: Я удалил свой -1, теперь, когда вы удалили вводящий в заблуждение код. – forsvarir

1

Создайте новый класс в отдельном файле в той же сборке (хотя он не должен быть одной и той же сборкой) и убедитесь, что он имеет одинаковое пространство имен.

Если они находятся в одной и той же сборке и пространстве имен, у вас не должно быть проблем. Вы узнаете, что у вас все получилось, когда созданный вами новый частичный элемент может увидеть свойства и методы сгенерированного класса EF в раскрывающемся списке в верхней части редактора исходного кода.

+0

О, да, верно, я могу видеть другие свойства в редакторе, проблема должна быть в том, как я пытаюсь ссылаться на нее на моем BLL – Musaab

+0

GlassStoreDAL.CAR newCar = new CAR(); новыйCar. это то, как я делаю это на своем BLL, я вижу все свойства, но «последовательности» один – Musaab

+0

@Musaab: глупый вопрос, но вы * уверены, что его нет, и это не просто, что intellisense не поймал еще? – forsvarir