EF 4,如何添加分部类
本文关键字:添加 何添加 EF | 更新日期: 2023-09-27 17:56:20
我需要扩展我的EF分部类,因为我想添加一些功能来使用Oracle的序列,但是我真的不知道如何使用这个分部类的东西,我制作了一个单独的.cs文件并将其命名为我的自动生成的类之一,如下所示:
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
}
总结一下大评论线索...
检查部件是否正确连接在一起:
- 确保两个类定义位于同一命名空间和程序集中。
- 确保其中至少有一个声明为部分类(大多数生成的类都是,包括 EF 生成的类)。
- 检查以确保新创建的分部可以看到以前的成员,以确认分部匹配。
客户端位于不同二进制文件中的位置(此处就是这种情况)
- 确保客户端项目二进制文件/引用是最新的(执行干净生成/删除二进制副本/重新创建引用),具体取决于项目情况。
对于这种情况,最后的检查是最重要的,并解决了问题。
你应该确保:
public partial class CAR
{
private int _sequences;
public int sequences
{
get { return _sequences; }
set { _sequences = value; }
}
}
在生成的 EF 类中,您需要:
public partial class CAR
{
}
- 将分部关键字添加到 EF 生成的类。
- 确保它们驻留在同一个命名空间中。
在同一程序集的单独文件中创建一个新类(尽管它不必是同一个程序集),并确保它具有相同的命名空间。
如果它们都位于同一程序集和命名空间中,则应该不会有任何问题。 当你创建的新部分可以在源代码编辑器顶部的下拉列表中看到生成的 EF 类的属性和方法时,你将知道你已经正确。