16

おおよそ次のような表があります。

CREATE TABLE Lockers 
{
  UserID int NOT NULL PRIMARY KEY (foreign key),
  LockerStyleID int (foreign key),
  NameplateID int (foreign key)
}

すべてのキーは他のテーブルに関連していますが、アプリケーションが分散されているため、ID をパラメーターとして渡す方が簡単です。だから私たちはこれをしたいと思います:

Locker l = new Locker { 
  UserID = userID, 
  LockerStyleID = lockerStyleID, 
  NameplateID = nameplateID 
};
entities.AddLocker(l);

LINQ-to-SQL ではできますが、EF ではできませんか?

4

6 に答える 6

16

この欠けている機能は、多くの人を悩ませているようです。

  • 朗報: MS は .NET 4.0 でこの問題に対処する予定です。
  • 悪いニュース: 今のところ、または 3.5 で立ち往生している場合は、少し作業を行う必要がありますが、それは可能です。

次のようにする必要があります。

Locker locker = new Locker();
locker.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", userID);
locker.LockerStyleReference.EntityKey = new EntityKey("entities.LockerStyle", "ID", lockerStyleID);
locker.NameplateReference.EntityKey = new EntityKey("entities.Nameplate", "ID", nameplateID);
entities.AddLocker(locker);
entities.SaveChanges();
于 2009-06-24T11:59:27.837 に答える
3

物事を簡単にするために私が行ってきたことは、外部キー プロパティを自分で部分クラスに追加することです。

public int UserID
{
   get
   {
      if (this.User != null)
         return this.User.UserID;
   }
   set 
   {
      this.UserReference.EntityKey = new System.Data.EntityKey("entities.User", "ID", value);
   }
}
于 2009-10-14T19:07:01.193 に答える
0

EntityKey を使用すると問題が解決します;)

アルコール。

于 2009-02-18T10:36:37.357 に答える
0

これらの ID に基づいてエンティティを構築する拡張メソッドを作成できます。

于 2009-01-26T18:43:58.557 に答える
0

「汚染」を気にしない場合の別の方法は、db スキーマに計算列を追加することです。たとえば、外部キー フィールド FK_Customer がある場合、式 FK_Customer を持つ新しい計算列 FK_Customer_Computed を定義できます。edmx モデルを生成または更新すると、フィールドは通常のフィールドのように表示され、エンティティ オブジェクトから参照できます。

またはEF4を待ちます:)

于 2010-02-20T14:01:56.137 に答える