【问题标题】:Entity Framework Many to many Web API Get实体框架 多对多 Web API 获取
【发布时间】:2016-06-05 03:35:30
【问题描述】:

我一直在查看一百万页,我觉得这应该是微不足道的,但我真的很挣扎。

我正在尝试首先使用代码创建一个 .net Web API,我有 2 个模型:事件和团队。每个活动都有很多团队,每个团队都做很多活动。

在我的 /api/GetEvents 请求中,我可以正常获取事件信息,但与该事件关联的团队列表为空

// GET: api/Events
    public IQueryable<Event> GetEvents()
    {
        return db.Events
    }

事件:

public class Event
{
    public int EventId { get; set; }
    [Required]
    public string EventTitle { get; set; }
    [Required]
    public string EventLocation { get; set; }
    public string EventTicketPrice { get; set; }
    [Required]
    public DateTime EventDateTime { get; set; }
    [Required]
    public ICollection<Team> Teams{ get; set; }
}

团队:

public class Team
{
    [Key]
    public int TeamId { get; set; }
    [Required]
    public string TeamName { get; set; }
    public string Class { get; set; }
    public string TeamLocation { get; set; }
    public string TeamWebsite { get; set; }

    public ICollection<Event> Events { get; set; }
}

我检查了生成的数据库和中间表,但它没有连接多对多关系。我尝试通过查询将它们联系在一起,但是中间表没有 DbSet 来连接表。 我错过了什么?

【问题讨论】:

    标签: .net asp.net-mvc entity-framework api asp.net-web-api


    【解决方案1】:

    尝试将集合属性设为虚拟:

    public virtual ICollection<Team> Teams{ get; set; }
    

    还有:

    public virtual ICollection<Event> Events { get; set; }
    

    EF 使用“虚拟”来标记它将尝试为您维护的导航属性,例如延迟加载。如果您不使用 virtual 标记导航属性,则您需要自己确保导航的目标已加载。

    【讨论】:

    • '类型 'System.Data.Entity.DynamicProxies.Event_0E1DE736705418490519E3DB4D2105315D4AAE635805F5203F136A5454E647EC' 与数据合同名 'Event_0E1DE736705418490519E3DB4D2105315D4AAE635805F5203F136A5454E647EC:预计不会schemas.datacontract.org/2004/07/…'。如果您使用 DataContractSerializer 或将任何静态未知的类型添加到已知类型列表中,请考虑使用 DataContractResolver - 例如,通过使用 KnownTypeAttribute 属性或将它们添加到传递给序列化程序的已知类型列表中。我现在明白了。
    • 看来将请求标头更改为 json 可以解决问题,但我宁愿现在遇到问题
    猜你喜欢
    • 2014-08-04
    • 1970-01-01
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多