簡體   English   中英

LINQ to SQL映射關聯以創建實體列表

[英]LINQ to SQL mapping associations to create a list of entities

我正在閱讀Apress Pro ASP.NET MVC框架,並且有一些LINQ to SQL示例,但是它們沒有顯示此示例的數據庫,並且尚不清楚它是如何工作的,因此我希望我可以從社區。

據我了解,在數據庫中,一個Item不能包含Bid的列表,因此,如果我們想要該列表,我們將在Bids表中查詢所有具有匹配ItemIDBid 在這本書的示例中,看起來在ItemBid之間建立了關聯,但是我懷疑Items表沒有將其鏈接到Bid的外鍵,因此我有幾個問題:

  1. 關聯基於什么?
  2. LINQ是否基於關聯的模型自動找出要在哪個表中進行關聯(在這種情況下, Bid映射到Bids表)?
  3. 是否會使用所有匹配的Bid自動填充Item模型的Bids屬性? 如果否,那么如何實現?

這是例子

[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; }
    }
}

您對#2的懷疑是不正確的; 實際上,LINQ-to-SQL(像大多數ORM一樣) 確實知道哪個表具有實際的關聯。 父子關系可以在關聯的兩側具有導航屬性。

這些會自動處理。 至於填充屬性,這將在顯式加載時或在訪問屬性時(如果啟用了延遲加載)發生。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM