如何使用Code-First表示聚合实体?

时间:2013-03-27 21:46:42

标签: c# asp.net database

我最近开始使用ASP.NET进行开发,并且正在努力掌握Code-First。我正在进行一个实习项目,除了我参加的一个班级之外,他们的数据库知识很少。我绝不会要求完整的解决方案或懒惰。

我已经尝试了几天来创建一个可靠的ER图表,我很确定下面的图表将代表我需要存储的所有信息。如果您发现可以改进的方法,请告诉我。

我正在尝试做什么:

对于此项目,管理员将创建具有下列属性的房间。然后,管理员将分配时间段,表示房间可用的小时数和可用的星期几。

用户将填写他们的基本信息并填写表示他们可用时间的表格。

在所有用户注册后,管理员将运行一个调度算法来提供最接近最有效的时间表(因为它很难NP)。

指定的关系表示与房间时段相关的用户时间段,以便生成一个表格,说明用户在什么时间分配给哪些房间。

我正在使用Visual Studio 2012。

问题

  1. 我如何使用Code-First代表这些聚合实体?不一定要求这个确切的图表的代码,但也许是一个快速的例子来帮助我绕过Code-First。
  2. 我的映射看起来对这些关系是否正确?
  3. 非常感谢任何帮助或指向正确的方向!!谢谢!

    以下是代表以下内容的ER图:

    • 房间(身份证号码,号码,建筑物,容量)
    • TimeSlot(id,startHour,endHour,dayOfWeek)
    • 用户(id,firstName,lastName,email)
    • 可用(userId,timeID)
    • 保留(roomID,timeID)
    • 已分配(reservedID,availableID)

    ER Diagram

1 个答案:

答案 0 :(得分:1)

首先在ER图中我希望直接从Room到TimeSlot(右上角)和User到Timeslot(右下角)的链接,但是知道将要运行的可能查询我会建议ERD应该是如下:

房间链接到名为RoomAvailability的实体。 RoomAvailability包含房间的所有空闲时间段,因此最初将每个房间每天一个记录(RoomId,Date,StartTime,EndTime)填充到您认为必要的未来几天。

类似地,我会将一个实体UserAvailability(UserId,Date,StartTime,EndTime)链接到User。

实体RoomReservation(RoomId,UserId,Date,StartTime,EndTime)链接到Room和User,其中包含所有房间预订(假设只有1位用户可以预订房间)。

当预订房间时,会添加RoomReservation记录,并且可以将单个RoomAvailability记录拆分为2个单独的记录(例如,房间全天免费,然后有人在白天预订一个插槽,在开始和结束时留下2个空闲时段当天)。

取消预订时,会删除RoomReservation记录,并且可以将2个RoomAvailability记录合并回1(与上述相反)。

我认为拆分和合并可用的插槽是类似系统的工作方式。