实体框架 - System.StackOverflowException

3

我对Entity Framework还不熟悉,尝试向查找表中插入新项目时遇到了问题。

错误信息如下 -

"未处理的异常类型 System.StackOverflowException 出现在mscorlib.dll中"

该错误出现在最终的代码块中,即调用public DIEMEntities()函数时。

每当我添加新项目时都会出现此错误,但我可以正常更新项目。

任何帮助将不胜感激。

以下是代码 -

protected void OnSave(object sender, EventArgs e)
    {
        ArrayList validationErrors = new ArrayList();
        ContactTypeEO contactType = new ContactTypeEO();

        if (uxID.Value.Length > 0)
        {
            //Updating
            contactType.Id = int.Parse(uxID.Value);
        }

        contactType.Name = uxName.Text;
        contactType.ExpressionValidator = uxExpression.Text;

        contactType.Save(ref validationErrors);

        if (validationErrors.Count > 0)
        {
            ShowValidationMessages(validationErrors);
        }
        else
        {
            this.RefreshUI();
        }
    } 

public bool Save(ref ArrayList validationErrors)
    {
        ValidateSave(ref validationErrors);

        if (validationErrors.Count == 0)
        {
            if (Id == 0)
            {
                ContactTypeData.Insert(Name, ExpressionValidator);
            }
            else
            {
                ContactTypeData.Update(Id, Name, ExpressionValidator);
            }
            return true;
        }
        else
        {
            return false;
        }
    } 

/// <summary>
    /// Inserts the new Contact Type.
    /// </summary>
    /// <param name="name">The name.</param>
    /// <param name="validator">The validator.</param>
    public static void Insert(string name, string validator)
    {
        using (DIEMEntities diemEntities = new DIEMEntities())
        {
            Insert(name, validator);
        }
    }

    /// <summary>
    /// Inserts the new Contact Type.
    /// </summary>
    /// <param name="diemEntities">The DIEM Entities.</param>
    /// <param name="name">The name.</param>
    /// <param name="validator">The validator.</param>
    public static void Insert(DIEMEntities diemEntities, string name, string validator)
    {
        diemEntities.usp_ContactTypes_Insert(name, validator);
    } 

public partial class DIEMEntities : DbContext
{
    public DIEMEntities()
        : base("name=DIEMEntities")
    {
    }

... OTHER CODE}

在最终的代码块中,它被抛出,即在调用public DIEMEntities()时。而你选择提供除了那个方法之外的所有代码?这甚至没有意义。我们拥有的一切都是失败的方法。 - Mike Perrenoud
你尝试过逐步调试来查看它在哪一行失败了吗? - Gaz Winter
1个回答

16
你这里有一个递归循环。
public static void Insert(string name, string validator)
{
    using (DIEMEntities diemEntities = new DIEMEntities())
    {
        Insert(name, validator);
    }
}

这将持续执行,直到内存耗尽。
我相信你的意图是这样做:
public static void Insert(string name, string validator)
{
    using (DIEMEntities diemEntities = new DIEMEntities())
    {
        Insert(diemEntities, name, validator);
    }
}

1
递归循环 - Thameem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接