我来自PHP / MySQL背景,所以也许我遇到的问题源于此。在发布了一周为我们的计算机硬件和软件创建库存跟踪器之后,有人终于告诉我他认为我做错了。问题不是我的代码,而是我的设计。这当然是可能的。我正在尝试在EF Code First中执行此操作,并且使用代码生成数据库的想法对我来说很陌生。但是,我让数据库工作,一切都指向正确的事情。但我不能从数据库中提取我需要的东西。
我想要做的是创建一个仪表板页面,其中包含硬件类型的类别。因此会有一个PC列表,一个监视器列表,一个打印机列表等。最初,我所做的是基于我对MySQL的了解。我创建了一个硬件表(类)和一个HardwareTypes表(类)。在MySQL中,我要做的是将HardwareType的ID放在Hardware表中,这样我就可以进行连接。然后,我可以通过一个简单的内部联接来获得所有的PC。
.NET似乎有所不同。它想要创建一个中间表 - HardwareHardwareTypes,然后连接另外两个表。这看起来很奇怪,但还可以。但是当我去获取所有的PC时,我似乎无法获得编写查询所需的帮助。所以请查看我的查询和课程,让我知道你的想法。
查询,返回硬件,而不是硬件类型 - 如何获取HardwareTypes?):
var pcs = db.Hardware.Where(h => h.HardwareType.Any(hwt => hwt.HType == "PC"));
ViewBag.Pcs = pcs.ToList();
硬件类:
public class Hardware
{
public int Id { get; set; }
public virtual ICollection<DeviceType> Type { get; set; }
public string AssetTagId { get; set; }
public virtual ICollection<Manufacturer> Manufacturer { get; set; }
[Required]
[StringLength(50)]
public string ServiceTagId { get; set; }
[Required]
[StringLength(50)]
public string SerialNumber { get; set; }
[Required]
[StringLength(75)]
public string ProductNumber { get; set; }
// [Required]
[StringLength(20)]
public string PurchaseDate { get; set; }
[StringLength(20)]
public string WarrantyExpiration { get; set; }
[Required]
[StringLength(20)]
public string WarrantyType { get; set; }
public virtual ICollection<Location> Location { get; set; }
public virtual ICollection<HardwareType> HardwareType { get; set; }
[Required]
[StringLength(2000)]
public string Notes { get; set; }
public string POATag { get; set; }
}
HardwareTypes类:
public class HardwareType
{
public int Id { get; set; }
[Required]
[StringLength(128)]
public string HType { get; set; }
public virtual ICollection<Hardware> Hardware { get; set; }
}
同样,如果我需要更多的是高级设计更改,请告诉我。如果我需要不同的查询,请告诉我。第三个(中间)表是动态生成的,很难知道如何发布。我很感激任何和所有的帮助。我最终需要的是个人电脑列表。以下是一些示例种子数据:
... new Hardware { AssetTagId = "2134",
Type = device.Where(h => h.DType == "Network Device").ToArray(),
Manufacturer = manuf.Where(h => h.ManufacturerName == "SonicWall").ToArray(),
ServiceTagId = "5243",
SerialNumber = "3456",
ProductNumber = "2345",
PurchaseDate = "2012-10-23",
WarrantyExpiration = "2012-11-12",
WarrantyType = "NBD",
Location = loc.Where(h => h.LocationName == "Paradise Lane").ToArray(),
Notes = "Scrapped",
HardwareType = htype.Where(h => h.HType == "PC").ToArray()}, ...
var htype = new List<HardwareType> {
new HardwareType { HType = "PC" },
new HardwareType { HType = "Monitor" },
new HardwareType { HType = "Printer" },
new HardwareType { HType = "Miscellaneous" }
};
如果我的种子数据结构错误,请告诉我。感谢。
答案 0 :(得分:0)
首先让我告诉你,在PHP / MySQL中运行的相同数据库设计也可以在这里工作。
我建议您最简单的方法是在数据库中创建一个连接表Hardware和HardwareType的视图,将新创建的视图添加到数据库模型中,并从视图而不是表中获取所需的数据。