如何使用EF设计具有层次关系表的模型?

时间:2012-01-12 15:46:39

标签: c# asp.net-mvc entity-framework

如果我有4个具有分层结构的表,例如:

  1. 建筑物(建筑物有很多楼层.1F,2F,3F ..) - 1级
  2. 楼层(楼层也有很多房间.101,201,301 ..) - 2级
  3. 房间(房间也有许多设施。电脑,房间冷却器..) - 3级
  4. 舒适度 - 等级4
  5. 这是我的模型概念:

    建筑模型

    public class Building
    {
        [Key]
        public string BuildingId { get; set; }
        public string BuildingName { get; set; }
        public virtual ICollection<Floor> floors { get; set; }    
    }
    

    地板模型

    public class Floor
    {
        [Key]
        public string BuildingId { get; set; }
        [Key]        
        public string FloorId { get; set; }
        public virtual Building Building { get; set; }
        public virtual ICollection<Room> rooms { get; set; }
    }
    

    房间模型

    public class Room
    {
        [Key]        
        public string BuildingId { get; set; }
        [Key]
        public string FloorId { get; set; }
        [Key]
        public string RoomId { get; set; }
        public virtual Building Building { get; set; }
        public virtual Floor Floor { get; set; }
        public virtual ICollection<Amenity> amenities { get; set; }
    }
    

    舒适模型

    public class Amenity 
    {
        [Key]
        public string AmenityId { get; set; }
        [ForeignKey("Builiding")]
        public string BuildingID{ get; set; }
        [ForeignKey("Floor")]
        public string FloorID{ get; set; }
        [ForeignKey("Room")]
        public string RoomID{ get; set; }
    }
    

    这是否正确,还有什么我需要的吗?

    我整天都试过这个ASP.NET tutorial,但是理解和表达我的概念太简单了,因为我不熟悉C#语法或.NET。

2 个答案:

答案 0 :(得分:0)

看起来很棒,你还会做什么。在一天结束时,您将使用一些数据库,从数据库的角度来看,它似乎是完美的结构。前进。

答案 1 :(得分:0)

如果我是你,我会使用NoSQL数据库,例如MongoDB。

它不使用,但它使用彼此相似的集合

使用Collection的好处是它可以包含数组或

JSON对象中的另一个JSON对象。

它甚至可以包含JavaScript函数和数组。

许多不同的房间也可以有不同类型的键和值,因为

MongoDB 无架构!

示例:收集“建筑物”

{
  name: 'buildingName',
  floor: [
    '1': [
      'room1': {
        'amenity': [ 'door', 'toilet', 'bed', 'window' ]
      },
      // ...
    ],
    // ...
  ], // ...
}

通过这种设计,您可以使用MongoDB完成所需的工作。