0

次の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が生成するクラスのモデルになると思いますが、データベースには外部キーの制約がないことを忘れないでください。

重要な質問は、外部キーを実際に持っていないときに、どのようにシミュレートするかということだと思います。

データベースに触れることができないことを忘れないでください。

ありがとう。

4

1 に答える 1

0

私は以前にこれを行いました:

1)データベースのコピーを取ります

2)関連する外部キーを作成します

3)コピーからエンティティフレームワークモデルを作成します

4)「ライブ」データベースを指すように接続文字列を変更します。

良い代替策は、最初にリバースエンジニアリングコードを使用して、データベースのコードファーストバージョンを作成することです。次に、コードに手動で関係を追加できます。

于 2013-03-15T17:53:56.030 に答える