2009-08-11 20 views
25

私のEF図では、これらのナビゲーションプロパティをたくさん見ていますが、実際に何が本当に必要なのかはわかりません。私がテーブルの多くを見ると、aspnet_Usersプロパティがあります。Entity Frameworkのナビゲーションプロパティとは何ですか?

これは何のためですか?彼らは結合を助けるか?または何?

Error 2 
Error 3007: Problem in Mapping Fragments starting at lines 1201, 1423: 
Non-Primary-Key column(s) [Field2] are being mapped in both fragments 
to different conceptual side properties - data inconsistency is possible 
because the corresponding conceptual side properties can be independently 
modified. 

答えて

44

ナビゲーションプロパティを使用すると、(当たり前!)1つのエンティティから「接続」エンティティにナビゲートすることができます。

など。ユーザーがロールに接続している場合は、「ロール」ナビゲーションを使用して、ユーザーに関連付けられているロールを読み込んで調べることができます。

EDIT:

あなたとLINQツーエンティティユーザーをロードし、また、その「役割」ナビゲーションプロパティを見たい場合は、明示的にあなたのLINQクエリで「役割」のエンティティを含める必要があります - EFはNOTのナビゲーションプロパティを自動的に読み込みます。

// load user no. 4 from database 
    User myUser = from u in Users.Include("Role") 
       where u.ID = 4 
       select u; 

    // look at the role the user has 
    string roleName = myUser.Role.Name; 

OR:

// load user no. 4 from database 
    User myUser = from u in Users 
       where u.ID = 4 
       select u; 

    // check to see if RoleReference is loaded, and if not, load it 
    if(!myUser.RoleReference.IsLoaded) 
    { 
     myUser.RoleReference.Load(); 
     // now, the myUser.Role navigation property should be loaded and available 
    } 

    // look at the role the user has 
    string roleName = myUser.Role.Name; 

それは基本的に、データベース内の外部キー関係にプログラムで同等だ - 2つのオブジェクト間の接続。それは基本的に2つのテーブル(またはEFが話す2つのエンティティ)間の結合を「隠す」か、解決します。

マルク・

+0

ああ 私は、いくつかのフィールドを追加することで問題を抱えています。私はテーブルを持っているように(にtableAそれを呼び出すことができます) 表Aは、2つのフィールド(フィールド1 とフィールド2)があります。私のaspnet_userTableには、すべての標準asp.netメンバーシップフィールドとフィールド1とフィールド2があります。 aspnet_userTableに新しいユーザーを追加しようとすると、Field1またはField2が表示されません。だから私は2つのステップでまずaspnet_Users.Createaspnet_Users()を実行してaspnet_Usersテーブルに保存します(それをユーザーと呼ぶことができます)。それから、私はuser.Field1 = "何か"を試しました。私はuser.Field2を試しました(プロパティは見つかりません)。 – chobo2

+1

user.TableA.Field1とuser.TableA.Field2ですが、私はそれを設定しようとすると、私はちょうどいくつかのnull参照エラーを取得します。 私は間違って何をしていますか? – chobo2

+0

さて、あなたの関係は間違っている - システムに新しいテーブル "TableA"を追加し、 "aspnet_user"との外部キー関係を作成すると、 "TableA"オブジェクトは "aspnet_User " - その逆ではありません。したがって、 "TableA"エンティティには、 "aspnet_User"ナビゲーションプロパティが必要です。 –

関連する問題