在Entity Framework 6.1.3中将1:n关系投射到单个实体

时间:2017-04-19 22:34:41

标签: c# .net entity-framework sql-server-2008 entity

我是Entity Framework的新手,所以请放纵。 ;)

我在C#桌面应用程序中使用Entity Framework 6.1.3,代码优先。

假设我在SQL Server 2008中有以下两个表:

calendarweek

  • id( long
  • 年( int
  • weeknumber( tinyint
  • description( text

calendarevent

  • id( long
  • calendarweek_id( long ,外键)
  • title( varchar

在申请表中,我有一个像这样的POCO:

class Event
{
    public long Id { get; set; }
    public int Year { get; set; }
    public Byte Week { get; set; }
    public String Title { get; set; }
    public String Description { get; set; }
}

是否可以将此1:n关系投射到单个实体中?

在Entity Framework之前的时间里,我只是简单地用ADO.NET加入了两个表并手动填充了Event对象。

我分别阅读本文主题的大多数文章假设您要在两个实体上映射1:n关系。我也试过实体分裂,但它似乎是为了使用1:1的关系。

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

可以说一个事件可能持续一个以上的日历周。因此,我们可以在def setalert(self): print(self.accdis,self.arrdis,self.hrdis,self.metric) image = '' # acc alert checker if checked in expertGUI if self.accdis == 1 and self.metric == 'ACC': print('acc') temp = Image.open(self.accimg) temp = temp.resize((5, 5), Image.ANTIALIAS) image = ImageTk.PhotoImage(temp) # arousal alert checker if checked in expertGUI elif self.arrdis == 1 and self.metric == 'EDA': print('eda') temp = Image.open(self.arrimg) temp = temp.resize((5, 5), Image.ANTIALIAS) image = ImageTk.PhotoImage(temp) # heart rate alert checker if checked in expertGUI elif self.hrdis == 1 and self.metric == 'HR': print('hr') temp = Image.open(self.hrimg) temp = temp.resize((5, 5), Image.ANTIALIAS) image = ImageTk.PhotoImage(temp) return image 中使用ICollectionDbSet

Event class

答案 1 :(得分:0)

您可以使用LINQ Expression

IList<Event> queryA = ( from e in context.CalenderEvents
                        join w in context.CalenderWeeks 
                          on e.CalenderWeek_Id equals w.Id
                        select new Event
                        {
                            Id = e.Id,
                            Year = w.Year,
                            Week = w.WeekNumber,
                            Title = e.Title,
                            Description = w.Description,
                        } ).ToList();

或lambdas

IList<Event> queryB = context.CalenderEvents
    .Include( e => e.CalenderWeek )
    .Select( e => new Event
    {
        Id = e.Id,
        Description = e.CalenderWeek.Description,
        Title = e.Title,
        Week = e.CalenderWeek.WeekNumber,
        Year = e.CalenderWeek.Year,
    } ).ToList();