0

在我的实体框架模型中,我有该列

    [EdmScalarPropertyAttribute(EntityKeyProperty=false, IsNullable=true)]
    [DataMemberAttribute()]
    public Nullable<global::System.Boolean> CanShow
    {
        get
        {
            return _CanShow;
        }
        set
        {
            OnCanShowChanging(value);
            ReportPropertyChanging("CanShow");
            _CanShow = StructuralObject.SetValidValue(value);
            ReportPropertyChanged("CanShow");
            OnCanShowChanged();
        }
    }
    private Nullable<global::System.Boolean> _CanShow;
    partial void OnCanShowChanging(Nullable<global::System.Boolean> value);
    partial void OnCanShowChanged();

通过使用部分类,我想在OnCanShowChanging方法中添加一些业务逻辑

为此,我尝试了以下代码:

public partial class MyTable
{
    partial void OnCanShowChanging(bool? value)
    {
        if (some_condition)
        {
            this.CanShow = value;
        }
        //else -> avoid column data change
    }
}

但我明白了StackOverflowException

我是那种场景的新手(使用实体框架的部分方法),如何解决?

4

3 回答 3

1

你不能CanShow从里面设置OnCanShowChanging

call 的设置器,它再次调用设置器,再次调用CanShow......等等。无限循环,直到溢出堆栈。OnCanShowChangingOnCanShowChanging

于 2013-04-25T17:56:51.863 回答
1

您的代码有一个 ciclic 调用。每当您为 CanShow 分配一个值时,它都会一次又一次地触发 OnCanShowChanging。修改您的逻辑并修复该重复调用。

于 2013-04-25T17:57:24.000 回答
1

OnCanShowChanging设置时递归调用CanShow。处理此问题的更好方法可能是执行以下操作:

    public partial class MyTable
    {
        private bool blockOnCanShowChanging = false;

        partial void OnCanShowChanging(bool? value)
        {
            if (blockOnCanShowChanging)
            {
                return; //Recursive call...just return
            }

            if (some_condition)
            {
                //Turn on bool to avoid recusive call
                blockOnCanShowChanging = true;

                this.CanShow = value;

                //reset bool to allow subsequent calls to OnCanShowChanging
                blockOnCanShowChanging = false;
            }

            //else -> avoid column data change
        }
    }
于 2013-04-25T19:27:19.313 回答