gpt4 book ai didi

asp.net - 外键查找下拉列表 EF 6

转载 作者:行者123 更新时间:2023-12-02 16:15:45 26 4
gpt4 key购买 nike

我已经谷歌搜索了三天,找不到可用的答案,我希望有人可以帮助我。

我从这个优秀的教程开始:

http://www.asp.net/web-forms/tutorials/data-access/model-binding/retrieving-data

我正在尝试扩展此项目,以允许“学术年”查找数据库中的另一个表,而不是枚举。我很惊讶找到一个使用 .net 4.5、VS 2013、EF 6 和动态字段来说明这一点的示例是多么困难。

所以,这就是我所做的:

1) 在数据库中添加了一个名为“Years”的新表(YearID tinyint PK,YearName varchar)。使用可能的值填充该表。

2)为了保持一致性,将Students中的字段从Year重命名为YearID,我将其更改为tinyint,在Students.YearID和Years.YearID之间创建了关系

3) 更改了 SchoolContext 以包含新表:

public DbSet<Year> Years { get; set; }

4)添加了Year类,如下:

public class Year
{
public byte YearID { get; set; }
public string YearName { get; set; }
public virtual ICollection<Student> Students { get; set; }
}

5)从学生类中删除了学年内容并替换为以下几行:

public byte YearID { get; set; }
public virtual Year Year { get; set; }

6) 更改了表单上的字段以显示新链接的 YearID:

<asp:DynamicField DataField="YearID" />

(最后)问题:YearID 显示为文本框,而不是下拉列表,我不知道如何解决这个问题。当它是枚举时它工作得很好,但作为查找时效果不佳。当它被定义为枚举时,它有这个注释:

    [EnumDataType(typeof(AcademicYear)), Display(Name = "Academic Year")]
public AcademicYear Year { get; set; }

是否需要类似的注释来告诉动态控件从“年”表获取其数据?据我所知,这整件事非常神秘且没有记录。

我在某处读到,您应该使用链接字段的名称,而不是任何其他名称,因此我将动态字段上的 DataField 更改为“Year”,而不是“YearID”。当我这样做时,控件将呈现为“System.Data.Entity.DynamicProxies.Year_9D4E99.........”。

当然,我的ForeignKey_Edit.ascx文件保持默认,即显示一个下拉列表。

我希望我在这里遗漏了一些非常明显的东西。

谢谢

最佳答案

对于 Entity Framework 6,您必须安装“EF6 的动态数据提供程序”:[http://blogs.msdn.com/b/webdev/archive/2014/02/28/announcing-the-release-of -dynamic-data-provider-and-entitydatasource-control-for-entity-framework-6.aspx][1]

在包管理器控制台中运行:

Install-Package Microsoft.AspNet.DynamicData.EFProvider -Version 6.0.0

在global.asax.cs中注册模型以获取动态数据

using System.Web.DynamicData;

void Application_Start(object sender, EventArgs e)
{
MetaModel DefaultModel = new MetaModel();
DefaultModel.RegisterContext(new Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(
() => new SchoolContext()),
new ContextConfiguration { ScaffoldAllTables = false });
}

在 Students.aspx 中,您需要使用插入 ID 的导航字段:

<asp:DynamicField DataField="Year" />

将其添加到student.aspx.cs

using System.Web.DynamicData;

protected void Page_Init()
{
MetaTable table = MetaTable.GetTable(typeof(Student));
studentsGrid.SetMetaTable(table);
}

您必须将此方法添加到包含导航字段的 gridview 或 formview 的每个页面。

关于asp.net - 外键查找下拉列表 EF 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21788674/

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