0

アプリケーションでCustomerエンティティの新しいインスタンスを作成しようとしていますが、いくつか問題があります。このエンティティにはいくつかのナビゲーションプロパティがあり、それぞれに独自のナビゲーションがあります。プロパティ。たとえば、各CustomerエンティティにはAddressエンティティがあり、各AddressエンティティにはPhoneNumberエンティティなどがあります。これらすべてのエンティティの新しいデータセットを取得する方法がわかりません。私は次のことを試しました:

context.Customers newCustomer = context.Customers.CreateCustomer(...);
newCustomer.FirstName = firstNameTextBox.Text;
newCustomer.Address.Street = streetTextBox.Text;   // this is where the error is thrown

この時点で、Addressがnullであるため、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーが発生します。私は当初、新しい顧客エンティティを作成すると、関連する各エンティティの新しいインスタンスが自動的に作成されると想定していましたが、そうではないはずです。誰かがこれがどのように機能するかについてのコード例を提供できますか?ありがとう。

4

1 に答える 1

1

まず、アドレスが値型であることに気づかなかった場合、私は失望します。アイデンティティを持たないので、エンティティであってはなりません。Entity Frameworkは、複合型機能を介してそのような型をサポートします。残念ながら、Entity Frameworkデザイナはこれをサポートしていません(編集: VS 2010で修正済み)。そのため、この機能を使用する唯一の方法は、EDMXを手動で編集することです。たまたま、アドレスはほとんどの例で使用されているタイプです。これを検討することをお勧めします。

それにもかかわらず、私はあなたが尋ねた質問に実際に答えます。

簡単な解決策は次のとおりです。

newCustomer.Address = new Address()
    {
        Street = streetTextBox.Text,
        // etc.
    };

ただし、Addressは実際には値型であるため(つまり、まったく同じ番地を持つ2人の顧客は、おそらく同じAddressオブジェクトを指す必要があります)、先に進む前に、コンテキストから既存のAddressオブジェクトを選択することをお勧めします。そして新しいものを新しくします。

newCustomer.Address = (from Addresses in context where ...).FirstOrDefault();
if (newCustomer.Address == null)
{
    newCustomer.Address = new Address()
        {
            Street = streetTextBox.Text,
            // etc.
        };
}
于 2009-02-04T16:50:04.220 に答える