我正在创建一个MVC应用程序,并希望使用Code First方法生成数据库。我用简单的表格完成了这个,但是现在我正在介绍外键关系,对我来说事情变得混乱。
我有三个类,每个类在DataBase中都有自己的表:
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&lt;&gt;单面的对象,以及关系的单面将具有多面的虚拟对象(两个类对于N:N具有另一个的ICollection&lt;&gt;,或者具有对于1:1的虚拟的两者)
但是,当我创建数据库时,我的表看起来像这样:
设备装置表
我只是在为我的桌子设置外键的方式倒退,还是我在这种情况下完全缺少另一个问题?我找不到关于这个主题的特别有用的信息来源。我还附上了这些表格的图表,只是为了帮助更清楚。
答案 0 :(得分:1)
您已经关闭 - 设备和设备上的属性需要是ICollections。您不需要为连接表定义类,EF将为您处理。这是你的课程应该是什么样子(这是一个很好的参考:)
public class Device
{
public Device()
{ this.Equipments = new HashSet<Equipment>();}
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalDeviceID { get; set; }
public int DeviceID { get; set; }
public string DeviceName { get; set; }
public virtual ICollection<Equipment> Equipments { get; set; }
}
public class Equipment
{
public Equipment()
{ this.Devices = new HashSet<Device>(); }
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int InternalEquipmentID { get; set; }
public int EquipmentID { get; set; }
public string EquipmentName { get; set; }
public virtual ICollection<Devices> Devices { get; set; }
}
答案 1 :(得分:1)
要生成外键,首先要做的是创建模型。
public class Device
{
[Key]
public int DeviceID { get; set; }
public string DeviceName { get; set; }
public virtual ICollection<Equipment> Equipments { get; set; }
}
public class Equipment
{
[Key]
public int EquipmentID { get; set; }
public string EquipmentName { get; set; }
public virtual ICollection<Device> Devices { get; set; }
}
然后为每个模型生成并编译驱动程序。 通过生成第一个模型,创建“上下文”。
加载项目并检查您是否可以访问创建的驱动程序。
现在检查数据库。该表在新表中有两个外键是自动创建的。