EntityFrameworkCore在查询中使用错误的列

时间:2017-03-30 18:10:14

标签: c# entity-framework-core

我正在尝试用.net核心编写我的第一个web api。我使用VS2017和核心1.1。除了我的一个对象之外,我已经完成了所有工作(我已经尝试了最后一行评论和取消注释......它没有任何区别):

public class Tag
{
    public int ID { get; set; }
    public string Name { get; set; }
    public bool ShowInFilter { get; set; }
    public ICollection<SubscriberTag> SubscriberTags { get; set; }
}

我的存储库代码如下所示:

private SubscriptionContext db;
public TagRepository(SubscriptionContext context) { db = context; }
public Tag Find(int key) => db.Tags.SingleOrDefault(a => a.ID == key);

这是从我的TagController调用的:

private iTagRepository TagItems { get; set; }
public TagController(iTagRepository tagItems) {TagItems = tagItems; }

[HttpGet("{id}", Name = "GetTag")]
public IActionResult Get(int id) { return new ObjectResult( TagItems.Find(id) ); }

问题是当我运行它时,执行的查询是:

exec sp_executesql 
N'SELECT TOP(2) [a].[ID], [a].[Name], 
    [a].[ShowInFilter], [a].[SubscriberID]
FROM [Tags] AS [a]
WHERE [a].[ID] = @__key_0',N'@__key_0 int',@__key_0=1

抛出和错误,因为标签不包含名为SubscriberID的列。 我搜索了所有代码,SubscriberID只显示了两个地方(在这里没有使用的其他类)。我的整个项目中没有部分课程(看到这是相关问题的问题。)

为什么EF将此列添加到其查询中以及如何修复它?

这里要求的是包含subscriberID的类:

public class SubscriberTag
{
    public long ID { get; set; }
    public long subscriberID { get; set; }
    public int tagID { get; set; }

    public Subscriber Subscriber { get; set; }
    public Tag Tag { get; set; }
}

订阅者类(删除了大量不相关的属性):

public class Subscriber
{
    public Subscriber()
    {
        //a few value initalizers/defaults
    }

    public long ID { get; set; }
    [StringLength(200)]
    public string FirstName { get; set; }
    //.......

    public ICollection<Subscribers.Models.Subscription> Subscriptions { get; set; }
    public ICollection<Subscribers.Models.Tag> Tags { get; set; }
}

1 个答案:

答案 0 :(得分:1)

由于订阅者上的属性Tags

public ICollection<Subscribers.Models.Tag> Tags { get; set; }

实体框架期望Tag对象具有Subscriber的外键,因此它使用它构建查询。看起来要配置多对多关系需要将属性更改为:

public ICollection<Subscribers.Models.SubscriberTag> SubscriberTag{ get; set; }

Configuring a Many-to-Many Relationship

感谢伊万的见解