使用导航属性获取数据

本文关键字:获取 数据 属性 导航 | 更新日期: 2023-09-27 18:34:25

我正在使用实体框架创建应用程序。我已经从数据库加载了数据库模型。here在Course表中DepartmentNavigation PropertyDepartmentID是外键。我创建了一个网格视图并将其数据源设置为课程表,但我想查看Deaptment Name而不是department ID。我可以使用导航属性,例如Department.count但是如何使用导航属性从部门表中获取数据(部门名称)。任何可以帮助我的人这是我的代码

       var result = (from o in ctx.Courses.Include("Department")
                     where o.Title == TextBox2.Text
                      select o
                      ).First();
        //GridView4.DataSourceID="";
        GridView3.DataSource=result;
        GridView3.DataBind();

如果我不使用 First 函数那么我就无法访问部门名称属性,如果我使用 First() 它说

Data source is an invalid type.  It must be either an IListSource, IEnumerable, or IDataSource.

请告诉我如何解决?

使用导航属性获取数据

我认为罗斯文中的产品和类别表与您的需求相似。我会写一个这样的查询:

        var ctx = new NorthwindEntities();
        var query = from prod in ctx.Products
                    where prod.ProductName.StartsWith("C")
                    select new { prod.ProductName, prod.UnitPrice, prod.Category.CategoryName };
var result = (from c in dbContext.Course
             select c).First();
if(!result.Department.IsLoaded)
   {
      result.Department.Load(); //this will load the course.Department navigation property
   }
//Assuming you have 1 - 1 relationship with course to department
string departmentName = result.Department.Name;

或者,如果您与该部门有 1 - M 关系,那么:

foreach(Department d in result.Department)
{
Console.WriteLine(d.Name);
}

编辑:
不要尝试加载部门,请执行以下操作

if(!result.DepartmentReference.IsLoaded)
{
result.DepartmentReference.Load()
}

如何:显式加载相关对象