gpt4 book ai didi

c# - 如何从 Entity Framework 数据库中获取对象列表?

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:43 24 4
gpt4 key购买 nike

我正在开发时间表系统。我是第一次使用 Entity Framework,对关系的工作方式感到困惑。

我有以下类(class),Week:

public class Week
{
public int WeekId { get; set; }
public DateTime FirstDayOfWeek { get; set; }
public List<TimeEntry> TimeEntries { get; set; }
public Week()
{
TimeEntries = new List<TimeEntry>();
}
}

并且每周包含一些TimeEntries:

public class TimeEntry
{
public int TimeEntryID { get; set; }
public double MonHours { get; set; }
public double TueHours { get; set; }
public double WedHours { get; set; }
public double ThuHours { get; set; }
public double FriHours { get; set; }
}

EF 为这些创建表的方式如下:

dbo.Weeks
WeekId (整数)
FirstDayOfWeek(日期时间)

dbo.TimeEntries
TimeEntryId (int)
周一( float )
周二营业时间( float )
周三( float )
周四营业时间( float )
周五( float )
Week_WeekId (int)

在我的表中,我有以下内容:

WeekId---FirstDayOfWeek
1------------2017-07-31

TimeEntryId---MonHours---TueHours...-Week_WeekId
1----------------1----------------2...------------ -1
2----------------0----------------1...------------ -1

(为糟糕绘制的表格道歉!)

问题是当我尝试使用 Linq 从我的 Controller 检索数据时,它不会拉回 TimeEntries 列表。

这是我正在使用的查询:

Week SelectedWeek = (from w in db.Weeks  
where w.WeekId == 1
select w).FirstOrDefault();

但是,SelectedWeek.TimeEntries 的计数为零?

我也尝试了相反的方法(从非 EF 的角度来看这似乎更合乎逻辑):

var timeEntries = from te in db.TimeEntries
where te.week_weekId == 1
select te;

但这给出了错误:

TimeEntry does not contain a definition for week_weekId...

正确的做法是什么?

最佳答案

Week SelectedWeek = (from w in db.Weeks  
where w.WeekId == 1
select w).FirstOrDefault();

上面的查询导致 SelectedWeek.TimeEntries 的计数为零,因为它没有被延迟加载或延迟加载。您要么需要为 TimeEntries 添加虚拟关键字,要么依赖预加载

Lazy Loading
public virtual ICollection<TimeEntry> TimeEntries { get; set; }

Or

Eager Loading
Week SelectedWeek = db.Weeks.Include("TimeEntries").Where(w => w.WeekId == 1).FirstOrDefault();

Or

Explicit Loading
var selectedWeek = db.Weeks.Find(1);

// Load the TimeEntries related to a given Week
context.Entry(selectedWeek ).Collection(t => t.TimeEntries).Load();

进一步阅读有关在 EF 中加载相关实体的信息:https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

关于c# - 如何从 Entity Framework 数据库中获取对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45470318/

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