在我的数据库中,我有表格。
物品:
ItemID, Name
集:
SetID, Name
在数据库中,这通常是多对多的关系,所以我在它们之间有一个名为ItemSets
的外键表。
项集:
ItemID, SetID
当我实现Entity Framework时,它会删除ItemSets
表,并在它自动创建的两个类上创建它:
物品:
public Item()
{
this.Sets = new HashSet<Set>();
}
public System.Guid ItemID { get; set; }
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Set> Sets { get; set; }
设置:
public Set()
{
this.Items = new HashSet<Item>();
}
public System.Guid SetsID { get; set; }
public string Name { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Item> Items { get; set; }
现在我要做的是选择具有相同Items
的所有SetsID
(逻辑上它们是一组的一部分)并将其作为{{1}返回} list。
两个问题:
表格是否仍以这种方式通过两个类表示?
在不使用自定义SQL且仅使用linq的情况下,这在EF中是否可行?
像Mithgroth Said那样回答
Item
我的代码:
db.Items.Where(i => i.SetID == someSetId)
所以需要注意的是:EF允许通过调用彼此的类来确定这种关系。在public IEnumerable<Item> GetItemsInSet(Set set)
{
return IronHelmContext.Items
.Where(x => x.Sets == set)
.ToList();
}
类中有一个Item
方法(由于自定义存储库),这允许与.Sets
类对象进行比较。
答案 0 :(得分:0)
你自然可以做到
db.Items.Where(i => i.SetID == someSetId)
数据来自您声明的多对多表。