【发布时间】:2016-10-26 19:02:52
【问题描述】:
我正在创建一个 MVC 应用程序并希望使用 Code First 方法生成数据库。我已经用简单的表完成了这项工作,但现在我要引入外键关系,事情变得一团糟。
我有三个类,每个类在数据库中都有自己的表:
public class Device
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalDeviceID { get; set; }
public int DeviceID { get; set; }
public string DeviceName { get; set; }
public virtual EquipmentDevice EquipmentDevice { get; set; }
}
public class Equipment
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalEquipmentID { get; set; }
public int EquipmentID { get; set; }
public string EquipmentName { get; set; }
public virtual EquipmentDevice EquipmentDevice { get; set; }
}
public class EquipmentDevice
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalEquipmentDeviceID { get; set; }
public virtual ICollection<Equipment> EquipmentID { get; set; }
public virtual ICollection<Device> DeviceID { get; set; }
}
关系是一个设备可能有许多设备,一个设备可能属于许多设备(如果我没记错的话是多对多)。为了组织哪些设备与哪些设备相关联,我使用 EquipmentDevice 表,它将它们的 ID 与该表的内部 ID 配对。
根据我发现的其他示例,我认为这是编写这种情况的方式,其中关系的多方将具有单方的 ICollection 对象,而单方关系的一个虚拟对象将具有多方的虚拟对象(两个类都具有 N:N 的另一个的 ICollection,或者都具有 1:1 的虚拟对象)
但是,当我创建数据库时,我的表如下所示:
设备设备表
我是在为我的表设置外键的方式上简单地倒退,还是在这种情况下我完全遗漏了另一个问题?我找不到关于这个主题的非常有用的信息来源。我还附上了这些表格的图表,以帮助更清楚。
【问题讨论】:
标签: c# mysql .net ef-code-first