EF 4,如何添加部分类

时间:2011-05-11 09:44:20

标签: c# .net oracle entity-framework-4 partial-classes

我需要扩展我的EF部分类,因为我想添加一些功能来使用Oracle的序列,但是我真的不知道如何使用这个部分类的东西,我做了一个单独的.cs文件和名字它是我自动生成的类之一,如下所示:

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

现在我认为,在我的BLL上 - 它引用了GlassStoreDAL - 我可以找到我的“序列”属性,但显然出现了问题,我将不胜感激。

这是我生成的部分类,我是否还应该拥有sequences属性?

[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 个答案:

答案 0 :(得分:9)

总结一下大评论的踪迹......

检查部分是否正确连接在一起:

  • 确保两个类定义位于相同的命名空间和程序集中。
  • 确保其中至少有一个被声明为部分(大多数生成的类都包含EF生成的类)。
  • 检查以确保新创建的部分可以看到以前的成员,以确认部分匹配。

客户端使用不同的二进制文件(这里就是这种情况)

  • 确保客户端项目二进制/引用是最新的(执行干净构建/删除二进制副本/重新创建引用),具体取决于您的项目情况。

对于这种情况,最后一次检查是最重要的,并解决了问题。

答案 1 :(得分: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. 确保它们位于同一名称空间中。

答案 2 :(得分:1)

在同一个程序集中的单独文件中创建一个新类(尽管它不必是相同的程序集),并确保它具有相同的名称空间。

如果它们都在同一个程序集和命名空间中,则不应该有任何问题。你知道,当你创建的新部分可以在源代码编辑器顶部的下拉列表中看到生成的EF类的属性和方法时,你已经做对了。