2014-04-12 1 views
0

지속성 데이터가없는 앱을 구축 중입니다. 그래서 그것은 기억에 남을 것입니다.데이터베이스없이 탐색 속성을 사용하는 방법

나는이 좀 샘플 데이터

public class DemoData 
    { 
     static Book book1 = new Book { Id = 1, Title = "Queen of the road", Author = "Tricia Stringer" }; 
     static Book book2 = new Book { Id = 2, Title = "Don't look now", Author = "Paul Jennings" }; 
     static Book book3 = new Book { Id = 3, Title = "Too bold to die", Author = "Ian McPhedran" }; 
     static Book book4 = new Book { Id = 4, Title = "The rosie project", Author = "Graeme Simson" }; 
     static Book book5 = new Book { Id = 5, Title = "In great spirits", Author = "Archie Barwick" }; 
     static Book book6 = new Book { Id = 6, Title = "The vale girl", Author = "Nelika Mcdonald" }; 
     static Book book7 = new Book { Id = 7, Title = "Watching you", Author = "Michael Robotham" }; 
     static Book book8 = new Book { Id = 8, Title = "Stillways", Author = "Steve Bisley" }; 


     static Borrower borrower1 = new Borrower { Id = 1, Firstname = "John", Lastname = "Smith" }; 
     static Borrower borrower2 = new Borrower { Id = 2, Firstname = "Mary", Lastname = "Jane" }; 
     static Borrower borrower3 = new Borrower { Id = 3, Firstname = "Peter", Lastname = "Parker" }; 
     static Borrower borrower4 = new Borrower { Id = 4, Firstname = "Eddie", Lastname = "Brock" }; 


     static BorrowedBooks borrowed1 = new BorrowedBooks { BookId = 8, Book = book8, BorrowerId = 2, Borrower=borrower2, DateBorrowed = DateTime.Parse("01/04/2014") }; 
     static BorrowedBooks borrowed2 = new BorrowedBooks {BookId = 6, Book = book6, BorrowerId = 4, Borrower = borrower4, DateBorrowed = DateTime.Parse("08/04/2014")}; 
     static BorrowedBooks borrowed3 = new BorrowedBooks { BookId = 2, Book = book2, BorrowerId = 4, Borrower = borrower4, DateBorrowed = DateTime.Parse("08/04/2014") }; 
     static BorrowedBooks borrowed4 = new BorrowedBooks { BookId = 1, Book = book1, BorrowerId = 1, Borrower = borrower1, DateBorrowed = DateTime.Parse("26/03/2014") }; 

     public List<BorrowedBooks> borrowedBooks = new List<BorrowedBooks> 
      { 
       borrowed1, borrowed2, borrowed3, borrowed4 

      }; 


     public List<Book> books = new List<Book> 
      { 
       book1, book2, book3, book4, book5, book6, book7, book8 

      }; 

     private List<Borrower> borrowers = new List<Borrower> 
      { 
       borrower1, borrower2, borrower3, borrower4    
      }; 

    } 

데이터 액세스 코드

public class BookRepository : IBookRepository 
    { 

     private DemoData data = new DemoData(); 



     public bool Add(Book book) 
     { 
      try 
      { 
       this.data.books.Add(book); 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 

      return true; 
     } 

     public bool BorrowBook(BorrowedBooks details) 
     { 

      try 
      { 
       this.data.borrowedBooks.Add(details); 
      } 
      catch (Exception ex) 
      { 
       return false; 
      } 

      return true; 


     } 

     public IEnumerable<Book> Search() 
     { 

      return data.books; 

     } 



    } 

컨트롤러 코드

을 채워하는 클래스를 생성 한

public class Book 
    { 
     public Book() 
     { 
      BorrowedBooks = new List<BorrowedBooks>(); 

     } 
     public int Id { get; set; } 
     public string Title { get; set; } 
     public string Author { get; set; }   
     public virtual ICollection<BorrowedBooks> BorrowedBooks { get; set; } 
    } 
    public class Borrower 
    { 
     public Borrower() 
     { 
      BorrowedBooks = new List<BorrowedBooks>(); 
     } 
     public int Id { get; set; } 
     public string Firstname { get; set; } 
     public string Lastname { get; set; } 


     public virtual ICollection<BorrowedBooks> BorrowedBooks { get; set; } 
    } 
    public class BorrowedBooks 
    { 
     public int Id { get; set; } 
     public int BookId { get; set; } 
     public int BorrowerId { get; set; } 
     public DateTime DateBorrowed { get; set; } 

     public virtual Book Book { get; set; } 
     public virtual Borrower Borrower { get; set; } 

    } 

다음 POCO 엔티티

public class BookController : Controller 
    { 
     private IBookRepository _bookRepo; 

     public BookController(IBookRepository bookRepo) 
     { 

      _bookRepo = bookRepo; 
     } 

     public ActionResult Search() 
     { 
      var test = _bookRepo.Search(); 

      return View(test); 
     } 
} 

그러나 저장소에서 데이터를 가져올 때 탐색 속성이 비어 있습니다 ... 내가 뭘 잘못하고 있니?

+0

데이터에 액세스하는 코드를 표시 할 수 있습니까? – kmacdonald

+0

은 book1.BorrowedBooks.Add (borrowed4)를 사용할 때 데이터 액세스 코드 – user2206329

답변

1

도서 컬렉션을 DemoData으로 채워야합니다. 직접 설정하지 않으면 null입니다. 즉, 지속성 프레임 워크를 사용하지 않는다면 양쪽에서 관계를 만들어야합니다.

book1에 대한 예를 들어, 당신은 추가해야합니다 : 모든 엔티티의 모든 모음 등

book1.BorrowedBooks.Add(borrowed4); 

그리고 당신의 메모리 데이터베이스에.

+0

을 추가했습니다.이 필드는 유형이지만 ..과 비슷합니다. – user2206329

+0

로직을 실행하는 곳에 어딘가에 넣어야합니다. 예를 들어'DemoData'에 생성자를 추가하고 거기에 넣으십시오. – Episodex

0

나는 DemoData 클래스에서도 목록을 정적으로 만들고 리파지토리의 인스턴스 private 멤버 인 DemoData을 제거해야한다고 생각합니다. 그렇게하면 모든 리포지토리에서 동일한 데이터가 사용됩니다.

public static class DemoData 
{ 
    static Book book1 = new Book { Id = 1, Title = "Queen of the road", Author = "Tricia Stringer" }; 
    static Book book2 = new Book { Id = 2, Title = "Don't look now", Author = "Paul Jennings" }; 
    static Book book3 = new Book { Id = 3, Title = "Too bold to die", Author = "Ian McPhedran" }; 
    static Book book4 = new Book { Id = 4, Title = "The rosie project", Author = "Graeme Simson" }; 
    static Book book5 = new Book { Id = 5, Title = "In great spirits", Author = "Archie Barwick" }; 
    static Book book6 = new Book { Id = 6, Title = "The vale girl", Author = "Nelika Mcdonald" }; 
    static Book book7 = new Book { Id = 7, Title = "Watching you", Author = "Michael Robotham" }; 
    static Book book8 = new Book { Id = 8, Title = "Stillways", Author = "Steve Bisley" }; 


    static Borrower borrower1 = new Borrower { Id = 1, Firstname = "John", Lastname = "Smith" }; 
    static Borrower borrower2 = new Borrower { Id = 2, Firstname = "Mary", Lastname = "Jane" }; 
    static Borrower borrower3 = new Borrower { Id = 3, Firstname = "Peter", Lastname = "Parker" }; 
    static Borrower borrower4 = new Borrower { Id = 4, Firstname = "Eddie", Lastname = "Brock" }; 


    static BorrowedBooks borrowed1 = new BorrowedBooks { BookId = 8, Book = book8, BorrowerId = 2, Borrower=borrower2, DateBorrowed = DateTime.Parse("01/04/2014") }; 
    static BorrowedBooks borrowed2 = new BorrowedBooks {BookId = 6, Book = book6, BorrowerId = 4, Borrower = borrower4, DateBorrowed = DateTime.Parse("08/04/2014")}; 
    static BorrowedBooks borrowed3 = new BorrowedBooks { BookId = 2, Book = book2, BorrowerId = 4, Borrower = borrower4, DateBorrowed = DateTime.Parse("08/04/2014") }; 
    static BorrowedBooks borrowed4 = new BorrowedBooks { BookId = 1, Book = book1, BorrowerId = 1, Borrower = borrower1, DateBorrowed = DateTime.Parse("26/03/2014") }; 

    public static List<BorrowedBooks> borrowedBooks = new List<BorrowedBooks> 
     { 
      borrowed1, borrowed2, borrowed3, borrowed4 

     }; 


    public static List<Book> books = new List<Book> 
     { 
      book1, book2, book3, book4, book5, book6, book7, book8 

     }; 

    private static List<Borrower> borrowers = new List<Borrower> 
     { 
      borrower1, borrower2, borrower3, borrower4    
     }; 
} 

그런 다음 책 저장소에서 인스턴스 필드가 아닌 정적 멤버를 통해 액세스합니다.

public class BookRepository : IBookRepository 
{ 
    public bool Add(Book book) 
    { 
     try 
     { 
      DemoData.books.Add(book); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
    } 

    public bool BorrowBook(BorrowedBooks details) 
    { 

     try 
     { 
      DemoData.borrowedBooks.Add(details); 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 

     return true; 
+0

컬렉션은 아무 곳에도 설정되지 않았기 때문에 여전히 'null'입니다. 내 대답을 보라. – Episodex

관련 문제