gpt4 book ai didi

c# - 如何在 EntityDataModel 的部分类中修改我的对象的值

转载 作者:太空宇宙 更新时间:2023-11-03 11:20:35 25 4
gpt4 key购买 nike

我有一个从我的数据库(Visual Studio 2010、asp.net 4.0、c#)生成的 EntityDataModel。我正在尝试使用与实体类关联的部分类来执行一些业务逻辑(在本例中检查电话号码字段并删除空格)。

如果我使用类似的东西:

 partial void OnMobilePhoneNoChanged()  
{
if (MobilePhoneNo != null)
{
MobilePhoneNo = ATG_COModel_Common.FormatPhoneNumber(MobilePhoneNo);
}
}

然后我得到一个无限循环(因为我的 FormatPhoneNumber 方法修改了 MobilePHoneNo 再次引发事件等)然后我得到...堆栈溢出!

当我尝试改用 OnMobilePhoneNoChanging 并修改 MobilePHoneNo 属性(或 value 值)时,该值未正确保存。

我该怎么办?

最佳答案

查看模型的 .Designer.cs 文件。你会看到这样的东西:

    /// <summary>
/// No Metadata Documentation available.
/// </summary>
[EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=false)]
[DataMemberAttribute()]
public global::System.String MobilePhoneNo
{
get
{
return _MobilePhoneNo;
}
set
{
OnMobilePhoneNoChanging(value);
ReportPropertyChanging("MobilePhoneNo");
_MobilePhoneNo = StructuralObject.SetValidValue(value, false);
ReportPropertyChanged("MobilePhoneNo");
OnMobilePhoneNoChanged();
}
}
private global::System.String _MobilePhoneNo;
partial void OnMobilePhoneNoChanging(global::System.String value);
partial void OnMobilePhoneNoChanged();

请注意,除了您已经知道的部分 ChangingChanged 方法外,还有一个支持字段。因为您的代码位于的一部分中,所以您可以访问所有成员,包括私有(private)成员。所以可以实现部分Changed方法,直接修改_MobilePhoneNo:

partial void OnMobilePhoneNoChanged()  
{
if (_MobilePhoneNo != null)
{
_MobilePhoneNo = ATG_COModel_Common.FormatPhoneNumber(_MobilePhoneNo);
}
}

这就是你想要的。

关于c# - 如何在 EntityDataModel 的部分类中修改我的对象的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11134229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com