假设我有一个简单的数据库示例,例如
create table Items
(ItemId int
,ItemName varchar(50)
,ItemCost decimal
,ItemOrigin varchar(50) --maps to reference of country codes
,primary key (ItemId)
)
go
create table Visits
(VisitId int
,VisitDate datetime
,VisitLocation varchar(50) --maps to references of country codes
,primary key (VisitId)
)
go
create table ItemsVisits
(ItemId int
,VisitId int
,ItemsPurchased int
,ItemExpirationDate datetime
,TotalCost decimal --equals price * items purchased
,primary key(ItemId,VisitId)
)
public class Items
{
public int ItemId { get; set; }
public string ItemName { get; set; }
public decimal ItemCost { get; set; }
public string ItemOrigin { get; set; }
}
public class Visits
{
public int VisitId { get; set; }
public DateTime VisitDate { get; set; }
public string VisitLocation { get; set; }
public List<Items> ItemsPurchased { get; set; }
}
上面两个简单的类是我的第一个倾向。在此示例中,该Items
表是可以购买的参考表,应用程序的“肉”在Visits
表中。使用上面的当前设置,我无法知道所购买物品的到期日期。(假设在这种情况下,某个 ItemId 的到期日期会根据购买日期而变化)。我应该添加一个像
public class ItemsVisits
{
public int ItemId { get; set; }
public int VisitId { get; set; }
public int ItemsPurchased { get; set; }
public DateTime ItemExpirationDate { get; set; }
public decimal TotalCost { get; set; }
}
然后让Visits
表有一个ItemsVisits
对象列表作为属性?或者更一般地说,我想,当联结表不仅包含两个表的主键的副本时,这是对多对多关系建模的正确方法吗?我最终会学习实体框架,但我想在学习时更接近金属。