C#Linq加入两个表实体框架加入外键表

时间:2018-01-06 20:21:40

标签: c# sql-server entity-framework linq

在我的数据库中,我有表格。

物品

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。

两个问题:

  1. 表格是否仍以这种方式通过两个类表示?

  2. 在不使用自定义SQL且仅使用linq的情况下,这在EF中是否可行?

  3. 像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类对象进行比较。

1 个答案:

答案 0 :(得分:0)

你自然可以做到

db.Items.Where(i => i.SetID == someSetId)

数据来自您声明的多对多表。

相关问题