MVCアプリケーションを作成していて、コードファーストアプローチを使用してデータベースを生成したいとします。私はシンプルなテーブルでこれをやってきましたが、今では私がForeign Key関係を導入しているので、物事は私のために混乱しています。コードを最初に使用する外部キーの割り当て
は、私は、データベース内の、独自のテーブルを持っていますそれぞれの3つのクラスが、持っている:
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とそのテーブルの内部IDをペアにするだけです。
私は、これが、このような状況をコード化する方法であると考えていました。これは、関係の多くの側がSingle側のICollection <オブジェクトを持ち、Single関係の側にはMany側の仮想オブジェクトがあります(どちらのクラスもN:Nの場合はICollectionが<>、どちらも仮想の場合は1:1)
ただし、データベース、私のテーブルは次のようになります。
EquipmentDevice表
私は私のテーブルの外部キーを設定していているように、単に後方アム、または別の問題がありますこのような状況のために私は完全に欠けていますか?私はこの主題に関する非常に有益な情報源を見つけることができませんでした。私はまた、これらのテーブルの図が同様に見えるものを添付して、より明確にするために役立てています。
非常にいいです - 私はEFがあなたのためにリレーショナルテーブルを作成することを認識していませんでした!しかし、あなたはおそらく "公共機器()... HashSet"と "公共デバイス(... HashSet)"クラスの部分を詳しく説明できますか?今の私の例では、私はそれを見つけたとは思わない。 –
EFは、多対多リレーションシップのいずれかの側でコレクションプロパティを表すためにHashSetオブジェクトを使用する。データベースまたはメモリからデータを取り込めるように、コンストラクタでそれらを「新しくする」必要があります。そうしないと、DBロード時にNullReferenceExceptionが発生します。また、CRUD操作のコレクションの1つを使用しようとすると、 –
それでは、私はTable_AとTable_Bを持っているとしましょう。これらはそれぞれ1:Nの関係を持っています。私はTable_AのIDをTable_BのFKとして使用したいが、Table_Bのどの列もTable_Aに存在する必要はない。私はこの関係から新しいテーブルを作成していないので、Table_Aは "public virtual Table_B objectname"プロパティを持ち、Table_Bは "public virtual ICollection objectname"プロパティを持ち、AからBへの外部キーを持ちますか? –