2016-02-21 4 views
0

Я знаю, что это старый вопрос, но я просто не могу заставить его работать и полюбить человеческое объяснение!Как правильно реализовать много к одной структуре в инфраструктуре сущности?

У меня есть четыре таблицы в моей базе данных и хотелось бы сделать только один вызов api, чтобы получить данные - таблицы представляют разные сущности, книги, статьи, случаи и уставы, мне нужна модель, называемая библиографией, которая тянет все это вместе.

Я пробовал следующее, но после добавления данных в таблицы и вызова этого контроллера я получаю 200 ok с данными [0].

Мои модели:

using System; 
using System.Collections.Generic; 
using System.ComponentModel.DataAnnotations; 
using System.Linq; 
using System.Web; 

namespace PhDResourceManager.Models 
{ 
    public class Journal 
    { 
     public Journal() { } 
     [Key] 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Author { get; set; } 
     public string PublicationYear { get; set; } 
     public string PublicationName { get; set; } 
     public string PageNumber { get; set; } 
     public virtual Bibliography Bibliography { get; set; } 
    } 

    public class Book 
    { 
     public Book() { } 
     [Key] 
     public int ID { get; set; } 
     public string Author { get; set; } 
     public string Title { get; set; } 
     public string Edition { get; set; } 
     public string PublicationYear { get; set; } 
     public string PublisherName { get; set; } 
     public string PageNumber { get; set; } 
     public virtual Bibliography Bibliography { get; set; } 
    } 

    public class Case 
    { 
     public Case() { } 
     [Key] 
     public int ID { get; set; } 
     public string Parties { get; set; } 
     public string NeutralCitation { get; set; } 
     public string LawReportsCitation { get; set; } 
     public virtual Bibliography Bibliography { get; set; } 
    } 

    public class Statute 
    { 
     public Statute() { } 
     [Key] 
     public int ID { get; set; } 
     public string Title { get; set; } 
     public string Section { get; set; } 
     public string Year { get; set; } 
     public virtual Bibliography Bibliography { get; set; } 
    } 

    public class Bibliography 
    { 
     public Bibliography() 
     { 
      MyJournals = new List<Journal>(); 
      MyCases = new List<Case>(); 
      MyBooks = new List<Book>(); 
      MyStatutes = new List<Statute>(); 
     } 
     [Key] 
     public int ID { get; set; } 
     public virtual ICollection<Journal> MyJournals { get; set; } 
     public virtual ICollection<Case> MyCases { get; set; } 
     public virtual ICollection<Book> MyBooks { get; set; } 
     public virtual ICollection<Statute> MyStatutes { get; set; } 
    } 
} 

Мой контроллер:

namespace PhDResourceManager.Controllers 
{ 
    public class BibliographyController : ApiController 
    { 
     private PhDResourceManagerContext db = new PhDResourceManagerContext(); 

     // GET: api/Bibliography 
     public IQueryable<Bibliography> GetBibliographies() 
     { 
      return db.Bibliographies; 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
      { 
       db.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 

     private bool BibliographyExists(int id) 
     { 
      return db.Bibliographies.Count(e => e.ID == id) > 0; 
     } 
    } 
} 
+2

Можете вы добавить код действия вашего контроллера? – CodeNotFound

+1

Похоже, вам просто нужно 'Incude()' коллекции. –

+0

Как мне это сделать, Герт? – anthonyhumphreys

ответ

-2

Изменен метод следующим образом:

public Bibliography GetBibliographies() 
     { 
       Bibliography bibliography = new Bibliography(); 
       bibliography.MyJournals = db.Journal.ToList(); 
       bibliography.MyCases = db.Cases.ToList(); 
       bibliography.MyBooks = db.Books.ToList(); 
       bibliography.MyStatutes = db.Statutes.ToList(); 
       return bibliography; 
     } 
+0

Это дает вам сущность с кучей несвязанных коллекций, на самом деле все данные из всех таблиц. Если вы ищете что-то подобное, создайте ViewModel с свойством для каждой коллекции. Библиография. Модель ENTITY должна содержать только конкретный объект и связанные с ним объекты. Для этого используйте синтаксис Include(). –