次のTransact-SQLを実行して作成できるテーブルが2つしかないSQLServerデータベース(TestDB)があるとします。
CREATE TABLE Person(
personId INT PRIMARY KEY IDENTITY(1,1),
name VARCHAR(50)
)
CREATE TABLE House(
personId INT,
houseId INT,
builtDate DATETIME,
PRIMARY KEY(personId, houseId)
)
理想的には、テーブルHouseのフィールドpersonIdは、テーブルPersonのフィールドpersonIdを参照する外部キーになりますが、ご覧のとおり、そうではありません。さらに、データベーススキーマを変更できないと仮定します。
Entity Frameworkを使用してこれらのテーブルを表すために、次のクラスが必要です
[Table("Person")]
public class Person
{
[Column("personId")]
public int Id{ get; set; }
[Column("name")]
public string Name{ get; set; }
public List<House> Houses{ get; set; }
}
[Table("House")]
public class House
{
[Column("personId")]
public int OwnerId { get; set; }
[ForeignKey("OwnerId")]
public Person Owner { get; set; }
[Column("houseId")]
public int HouseId{ get; set; }
[Column("builtDate")]
public DateTime BuiltDate{ get; set; }
}
public class EFDbContext : DbContext
{
public DbSet<Person> Persons {get; set;}
public DbSet<House> Houses {get; set;}
}
これは、データベースにPerson(personId)とHouse(personId)の間に関係がある場合に、Entity Frameworkが生成するクラスのモデルになると思いますが、データベースには外部キーの制約がないことを忘れないでください。
重要な質問は、外部キーを実際に持っていないときに、どのようにシミュレートするかということだと思います。
データベースに触れることができないことを忘れないでください。
ありがとう。