Я читаю Apress Pro ASP.NET MVC Framework , и есть несколько примеров LINQ to SQL, но они не показывают базу данных для этого примера, и не совсем понятно, как это работает, поэтому я надеялся получить разъяснения от сообщества.
Насколько я понимаю, в базе данных Item
не может иметь список Bid
с, поэтому, если бы мы хотели получить список, мы запросили бы таблицу Bids
для всех Bid
с соответствующим ItemID
. В примере с книгой выглядит, как будто между Item
и Bid
установлена связь, но я подозреваю, что таблица Items
не имеет внешнего ключа, который связывал бы ее с Bid
, поэтому я имею несколько вопросов:
- На чем основана ассоциация?
- Может ли LINQ автоматически определить, в какую таблицу выполнить сопоставление, на основе связанной модели (в данном случае
Bid
сопоставляется с таблицей Bids
)?
- Будет ли свойство
Bids
модели Item
автоматически заполняться всеми соответствующими Bid
с? Если нет, то как этого достичь?
Вот пример
[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; }
}
}