以下の例のように、VS2010、EF4 機能 CTP (最新リリース)、および POCO オブジェクトを使用しています。
class Person
{
public int ID { get; set; }
public string Name { get; set; }
public virtual IList<Account> Accounts { get; set; }
...
}
class Account
{
public string Number { get; set; }
public int ID { get; set; }
...
}
簡潔にするために、context
以下が EF4 のコンテキスト オブジェクトであると仮定します。エンティティ タイプとデータベースの間に dbml マッピングがあり、次のように問題なく使用できます。
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
context.Add(doug);
context.Save();
doug.Accounts.Add(new Account() { Name = "foo" });
context.Save(); // two calls needed, yuck
この時点で、データベースには "Doug" という名前の Person レコードと、アカウント レコード "foo" があります。これらのレコードをクエリして取得できます。しかし、Person を保存する前にアカウントを追加しようとすると、Accounts リストは null になります (プロキシはそのプロパティのインスタンスをまだ作成していません)。次の例を参照してください。
Person doug = context.Persons.CreateObject();
doug.Name = "Doug";
doug.Accounts.Add(new Account() { Name = "foo" }); // throws null reference exception
context.Add(doug);
context.Save();
他の誰かがこれに遭遇しましたか?さらに良いことに、誰かが良い解決策を見つけましたか?