0

私はEntity Frameworkに非常に慣れていないため、そこで使用されている技術用語がわかりません。下手な英語で申し訳ありません。

私は、エンティティ フレームワークとファイルを含むプロジェクトで作業してい.edmxます。ファイルにはエンティティが作成されています。

そこで、2 つのエンティティを作成し、TableA と TableB という名前を付けました。pid は TableA のエンティティ キー、cid は TableB のエンティティ キーです。そして、その中に多対一の関係を作りました。つまり、TableA 行 1 は TableB_cid=1 を持つことができ、TableA 行 2 は TableB_cid=2 を持つこともできます

そして、「モデルからデータベースを生成」を行いました

CREATE TABLE [TableA] (
    [pid] nvarchar(max)  NOT NULL,
    [name] nvarchar(max)  NOT NULL,
    [TableB_cid] nvarchar(max)  NOT NULL
);
GO


CREATE TABLE [TableB] (
    [cid] nvarchar(max)  NOT NULL,
    [name] nvarchar(max)  NOT NULL
);

pid|name|TableB_cid
--------------------
1 | a | 2
2 | b | 2
3 | c | 1


cid|name
------------
1 | s
2 | f

C#コードで私はこれを書きました、

TableA obj = repository.All().Single(w=>w.pid == "1")
context.Entry<TableA>(obj).Reference<TableB>(o => o.TableB).Load();

これで、cid=1 の TableB が読み込まれます (ただし、cid=2 の TableB を読み込むことでした)。

TableB_cid (TableA) から cid (TableB) ではなく、主キーと主キーが一致していると思います。

だから私が間違っていることを助けてください。

編集:
要するに、テーブル A の非プライマリ列とテーブル B のプライマリ列との関連付けを Entity Framework 4.0 に追加できる方法を探しています。また、linq クエリと結合を使用したくありません。試してみましたが、edmxファイルでそれを実行できる方法またはオプションを見つけることができません。 ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力 ありがとう、

M

4

2 に答える 2

0
    var childs = from c in context.Children
                      where c.cid = o.Child_cid;

それはあなたを助けるはずだと思います。

于 2012-08-03T12:31:34.450 に答える
0

質問を理解しているかどうかはわかりませんが、あなたの例では、ID 1 で TableA の TableB エンティティにアクセスしようとしているだけですか?

もしそうなら、これはどうですか:

TableA obj = repository.All().Single(w=>w.pid == "1");
TableB SecondTable = obj.TableB;

SecondTable.cid は 2 である必要があり、obj.pid は 1 である必要があります。そうでない場合、どのような値が得られますか?

于 2012-08-04T04:25:19.917 に答える