2009-04-22 13 views
3

私はLinq to Entitiesを使用しています。私はメインテーブル、従業員のセットアップにvendorIDという名前のフィールドを持っています。ベンダーIDは、ベンダーのテーブルへの外部キーです。Linq to Entities(EF):参加をせずにFKの値を取得する方法

今のところ、EmployeeオブジェクトはvendorIDを直接公開しません。代わりに、私はそれをこのようにアクセスすることができます。

var employee = (from e in context.Employees.Include("tbl_vendors") 
       where e.employeeID = 1 
       select e).FirstOrDefault(); 

//this gets the vendor ID 
int vendorID = employee.tbl_vendors.vendorID; 

だけで罰金とダンディですが、何も必要ありませんどこに参加強制されているので、それは、データベース上の余分な作業です。 tbl_vendorsテーブルへの参加を強制されることなく、そのキー値を取得する方法はありますか?

答えて

3

あなたは、実体参照を経由して外部キーにアクセスすることができます。

Employee employee = context.Employees.Single(e => e.employeeID == 1); 

Int32 vendorID = (Int32)employee.tbl_vendorsReference.EntityKey. 
    EntityKeyValues[0].Value; 

EntityReferenceEntityKeyクラスの参照については、MSDNを参照してください。あなたはL2Eが参加して最適化するに参加をしているように、これは見えていても

var tblVendorID = (from e in context.Employees 
        select e.tbl_vendors.ID).FirstOrDefault(); 

+0

キーのインデックス位置ではなく名前で参照する方法はありませんか?新しいキーがテーブルに追加されると、インデックスが変更される可能性があるため、インデックスを使用するのは危険です。 – bugfixr

+1

これはキーのインデックス位置ではなく、キー内の列のインデックス位置です。複合キーの可能性を考慮しています –

+1

EntityKey.EntityKeyValuesを検索し、そのキーを保持するEntityKeyMember.Keyプロパティを調べることができますあなたが探しているキー値を見つけるために名前を入力してください。 –

1
ここにあなたのオブジェクトの名前がわから

ないが、あなたがこのようなデータベースの何かに行かなくても、エンティティのキ​​ープロパティからキーをつかむことができます。

var employee = (from e in context.Employees 
       where e.employeeID = 1 
       select e).FirstOrDefault(); 

//this gets the vendor ID 
int vendorID = (int)employee.tbl_vendorsReference.EntityKey.EntityKeyValues[0].Value; 
5

は、実はこれは、あなたが基本的にこれを行う非常に簡単です。あなたはこのようなコードで確認することができ

var results = from e in ctx.Employees 
       select e.tbl_vendors.ID; 

var query = results as ObjectQuery<int>; 
string sql = query.ToTraceString(); 

が、これは アレックス(マイクロソフト)お役に立てば幸いです。

関連する問題