EF 4, как добавить частичные классы - PullRequest
6 голосов
/ 11 мая 2011

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

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

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

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

[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
}

Ответы [ 3 ]

9 голосов
/ 11 мая 2011

Подводя итог большому следу комментария ...

Убедитесь, что частичные элементы правильно соединены:

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

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

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

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

6 голосов
/ 11 мая 2011

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

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 голос
/ 11 мая 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...