2011-02-24 15 views
0

私はApress Pro ASP.NET MVC Frameworkを読んでいますが、いくつかのLINQ to SQLの例がありますが、この例のデータベースは表示されません。私はコミュニティから何らかの明確化を得ることができることを期待しています。エンティティのリストを作成するLINQとSQLのマッピングの関連付け

私の知る限り理解し、データベースにItemBidのリストを持つことができませんので、我々はリストを望んでいたならば、我々は一致ItemIDですべてBid秒間Bids表を問い合せます。本書の例ではItemBid間で確立関連があるように見えますが、私はItems表はので、私はいくつかの質問持っBidにそれをリンクする外部キーを持っていないと思われる:

  1. アソシエーションは何に基づいていますか?
  2. LINQは、関連するモデルに基づいて関連付けを行うテーブルを自動的に特定します(この場合、BidBidsテーブルにマップされます)。
  3. ItemモデルのBidsプロパティに、一致するすべてのBidが自動的に設定されますか?いいえの場合は、どのように達成できますか?ここで

#2の

[Table(Name="Members")] 
public class Member 
{ 
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)] 
    internal int MemberID { get; set; } 
    [Column] public string LoginName { get; set; } 
    [Column] public int ReputationPoints { get; set; } 
} 

[Table(Name = "Items")] 
public class Item 
{ 
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)] 
    public int ItemID { get; internal set; } 
    [Column] public string Title { get; set; } 
    [Column] public string Description { get; set; } 
    [Column] public DateTime AuctionEndDate { get; set; } 

    [Association(OtherKey = "ItemID")] 
    private EntitySet<Bid> _bids = new EntitySet<Bid>(); 
    public IList<Bid> Bids { get { return _bids.ToList().AsReadOnly(); } } 
} 

[Table(Name = "Bids")] 
public class Bid 
{ 
    [Column(IsPrimaryKey=true, IsDbGenerated=true, AutoSync=AutoSync.OnInsert)] 
    internal int BidID { get; set; } 
    [Column] internal int ItemID { get; set; } 
    [Column] public DateTime DatePlaced { get; internal set; } 
    [Column] public decimal BidAmount { get; internal set; } 
    [Column] internal int MemberID { get; set; } 

    internal EntityRef<Member> _member; 
    [Association(ThisKey = "MemberID", Storage = "_member")] 
    public Member Member { 
     get { return _member.Entity; } 
     internal set { _member.Entity = value; MemberID = value.MemberID; } 
    } 
} 

答えて

1

あなたの疑いが間違っている例です。 LINQ-to-SQL(ほとんどのORMのように)を実行しますが、実際にどのテーブルに実際の関連性があるかを知っています。親子関係は、関連の両側にナビゲーションプロパティを持つことができます。

これらは自動的に処理されます。プロパティの塗りつぶしは、明示的にロードされたとき、または(遅延読み込みが有効なときに)プロパティにアクセスしたときに発生します。

+0

申し訳ありませんが、私の疑惑を少し編集しました。他の人のために:アダムは私に、LINQ-to-SQLが実際にどのテーブルが実際に関連しているかを(自動的に)知ることができないと考えていることを指摘しています。 – Kiril

+0

@リリック:答えはまだ "はい"です;) –

関連する問題