6

データベースにルックアップテーブルとデータテーブルがあります。例として性別と人を使用します。したがって、性別テーブルが次のようになっているとしましょう。

Id         Code
1          Male
2          Female

人物テーブルは次のようになります。

Id         Name             GenderId
1          Bob              1
2          Jane             2

私は最初に次のように両方のテーブルをEFコードでモデル化しました。

public class Gender
{
    public int Id {get;set;}
    public string Code {get;set;}
}

public class Person
{
    public int Id {get;set;}
    public string Name {get;set;}
    public int GenderId {get;set;}

    public virtual Gender {get;set;}
}

すでにDBにある人を読んだ場合、問題なくperson.Gender.Codeにアクセスできます。私がこれを行う場合:

var person = new Person
             {
                 Name = "Bob",
                 GenderId = 1,
             };

context.People.Add(person);
context.SaveChanges();

var code = person.Gender.Code;

その後、正しく保存されますが、性別がnullであるため、最後の行で失敗します。次に、新しいコンテキストを開いて保存されたエンティティをロードすると、最後の行は正常に機能します。DBからエンティティをロードしたかのように、保存直後に性別にアクセスできる方法はありますか?

4

1 に答える 1

11

あなたの問題は、それを使用すると、そのプロパティnew Person()を取得する方法がわからない POCO オブジェクトが作成されることです。したがって、遅延読み込みを機能させるには、プロキシGenderが必要です。

DbSet.Create()を使用して、プロキシとして個人を作成できます。

var person = context.People.Create();
person.Name = "Bob";
person.GenderId = 1;

context.People.Add(person);
context.SaveChanges();
于 2012-06-14T06:36:42.017 に答える