【问题标题】:How can I solve this "System.Data.Entity.DynamicProxies" error如何解决此“System.Data.Entity.DynamicProxies”错误
【发布时间】:2015-04-12 12:52:50
【问题描述】:

我是 Linq 和 EF Code First 的新手,遇到了一个我无法弄清楚的问题。我正在使用 ASP.Net Web 表单、EF Code First 和 Linq 开发概念验证考试程序。想法是我根据数据库动态生成页面的服务器控件。我之前在没有 EF 的情况下构建了相同的应用程序,但希望在这个项目中学习到这一点。如果我使用文字,但在对 RadioButtonList 进行数据绑定时收到错误消息,我可以获得正确的结果。

DataBinding: 'System.Data.Entity.DynamicProxies.Choice_EA448AD48C19F54FBB6BF09B7A03BA899DBE75EC189635A8982E7C3B1D8F4ABD' does not contain a property with the name '4'.

Line 34:                 content.Controls.Add(ql);
Line 35:                 ql.DataSource = choices;
Line 36:                 ql.DataBind();            
Line 37:         }

名称为“4”的属性只是我数据库中的一个值。我不确定这个问题是否与延迟加载有关,或者只是缺乏正确的 Linq 知识,但如果有人能指出我正确的方向,我将不胜感激。

这是我正在使用的三个 Class 文件和我正在尝试构建的 C# 页面。请记住,我计划将数据访问分离到另一个类中,但只是试图让一个演示为我自己工作。 考试.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

/// <summary>
/// Summary description for Exam
/// </summary>
public class Exam
{    
    public int ExamId { get; set; }

    public string Title { get; set; }

    public string Description { get; set; }

    public bool Status { get; set; }

    public DateTime DateCreated { get; set; }

    public string CreatedBy { get; set; }

    public virtual ICollection<Question> Questions { get; set; }
}

问题.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Question
/// </summary>
public class Question
{
    public int QuestionId { get; set; }

    public string QuestionText { get; set; }

    public int Order { get; set; }

    public DateTime DateCreated { get; set; }

    public bool Status { get; set; }

    public string CreatedBy { get; set; }

    public string QuestionType { get; set; }

    public int ExamId { get; set; }

    public virtual Exam Exam { get; set; }

    public virtual ICollection<Choice> Choices { get; set; }
}

Choice.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

/// <summary>
/// Summary description for Choice
/// </summary>
public class Choice
{
    public int ChoiceId { get; set; }

    public string ChoiceText { get; set; }

    public int Order { get; set; }

    public bool Status { get; set; }

    public bool Correct { get; set; }

    public DateTime DateCreated { get; set; }

    public string CreatedBy { get; set; }

    public int QuestionId { get; set; }

    public virtual Question Question { get; set; }
}

Testing.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class Testing : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        ExamsContext db = new ExamsContext();

        var questions = (from c in db.Exams
                     from q in c.Questions
                     where c.ExamId == 1
                     select q).ToList();
        ContentPlaceHolder content = (ContentPlaceHolder)this.Master.FindControl("MainContent");
        foreach (var question in questions)
        {
            Literal questionLabel = new Literal();
            questionLabel.Text = Convert.ToString(question.QuestionId) + ".&nbsp;" + question.QuestionText + "<br/>";
            content.Controls.Add(questionLabel);

            var choices = (from c in question.Choices select c).ToList();

            RadioButtonList ql = new RadioButtonList();   
                foreach (var choice in choices)
                {
                    ql.DataValueField = Convert.ToString(choice.ChoiceId);
                    ql.DataTextField = choice.ChoiceText;
                }
                content.Controls.Add(ql);
                ql.DataSource = choices;
                ql.DataBind();            
        }        
    }
}

【问题讨论】:

    标签: c# asp.net linq entity-framework ef-code-first


    【解决方案1】:

    我使用 ASP.NET WebForms 已经有一段时间了,但我认为您的问题在这里:

    ql.DataValueField = Convert.ToString(choice.ChoiceId);
    ql.DataTextField = choice.ChoiceText;
    

    我认为Convert.ToString(choice.ChoiceId) 是在告诉控件使用名为“4”的属性。

    试试这个:

    ql.DataValueField = "ChoiceId";
    ql.DataTextField = "ChoiceText";
    

    即您需要指定要使用的属性的名称,而不是值

    【讨论】:

    • 感谢工作。我知道它必须像那样简单。
    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 2012-02-14
    • 2016-06-21
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多