Entity Framework를 이용하여 DB에 접근가능.
Data를 Entity에 매핑하여 Database 객체들을 Object화 가능.
여기서는 그 중 Code First 방법에 대해서 설명
책 내용 따라가다가 에러나는 부분의 해결방법
1. Dbset<Book> Books에서 에러가 나는건 Book 클래스가 public이 아니라서 그런것. 접근자를 바꿔주자.
2. 빌드했는데 접근할 수 없다 어쩌고 에러나는건 SQL Server가 안 깔려있어서 그런것.
여기서 나오는 것들은 비쥬얼 스튜디오에 포함된 SQL Server Express LocalDB를 이용하는 건데 설치가 안되서그렇다.
Visual Studio Installer에서 개별구성요소 - 클라우드, 데이터베이스 및 서버 - SQL 관련 다 설치해주자.
내용은 책을 참고.
전체코드는 아래와 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | using SampleEntityFramework.Models; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SampleEntityFramework { class Program { static void Main(string[] args) { Practice13_3(); } static void InsertBooks() { using (var db = new BooksDbContext()) { var book1 = new Book { Title = "별의 계승자", PublishedYear = 1977, Author = new Author { Birthday = new DateTime(1941, 6, 27), Gender = "M", Name = "제임스 P. 호건", } }; db.Books.Add(book1); var book2 = new Book { Title = "타임머신", PublishedYear = 1895, Author = new Author { Birthday = new DateTime(1866, 9, 21), Gender = "M", Name = "허버트 조지 웰즈", } }; db.Books.Add(book2); db.SaveChanges(); Console.WriteLine($"{book1.Id} {book2.Id}"); } } static IEnumerable<Book> GetBooks() { using (var db = new BooksDbContext()) { return db.Books .Where(book => book.Author.Name.StartsWith("제임스")) .ToList(); } } static void DisplayAllBooks() { var books = GetBooks(); foreach (var book in books) { Console.WriteLine($"{book.Title} {book.PublishedYear}"); } Console.ReadLine(); } private static void AddAuthors() { using (var db = new BooksDbContext()) { var author1 = new Author { Birthday = new DateTime(1890, 09, 15), Gender = "F", Name = "애거사 크리스티" }; db.Authors.Add(author1); var author2 = new Author { Birthday = new DateTime(1812, 02, 07), Gender = "M", Name = "찰스 디킨스" }; db.Authors.Add(author2); db.SaveChanges(); } } private static void AddBooks() { using (var db = new BooksDbContext()) { var author1 = db.Authors.Single(a => a.Name == "애거사 크리스티"); var book1 = new Book { Title = "그리고 아무도 없었다", PublishedYear = 1939, Author = author1 }; db.Books.Add(book1); var author2 = db.Authors.Single(a => a.Name == "찰스 디킨스"); var book2 = new Book { Title = "두 도시 이야기", PublishedYear = 1859, Author = author2 }; db.Books.Add(book2); db.SaveChanges(); } } private static void UpdateBook() { using (var db = new BooksDbContext()) { var book = db.Books.Single(x => x.Title == "별의 계승자"); book.PublishedYear = 2016; db.SaveChanges(); } } private static void DeleteBook() { using (var db = new BooksDbContext()) { var book = db.Books.SingleOrDefault(x => x.Id == 10); if (book != null) { db.Books.Remove(book); db.SaveChanges(); } } } private static void Practice13_1() { using (var db = new BooksDbContext()) { var author1 = new Author { Birthday = new DateTime(1947, 9, 21), Gender = "M", Name = "스티븐 킹" }; var author2 = new Author { Birthday = new DateTime(1911, 9, 19), Gender = "F", Name = "윌리엄 골딩" }; db.Authors.Add(author1); db.Authors.Add(author2); var book1 = new Book { PublishedYear = 1977, Title = "샤이닝", Author = author1 }; var author3 = db.Authors.Single(a => a.Name == "애거사 크리스티"); var book2 = new Book { PublishedYear = 1948, Title = "밀물을 타고", Author = author3 }; var author4 = db.Authors.Single(a => a.Name == "찰스 디킨스"); var book3 = new Book { PublishedYear = 1843, Title = "크리스마스 캐럴", Author = author4 }; var book4 = new Book { PublishedYear = 1954, Title = "파리대왕", Author = author2 }; db.Books.Add(book1); db.Books.Add(book2); db.Books.Add(book3); db.Books.Add(book4); db.SaveChanges(); } } private static void Practice13_2() { using (var db = new BooksDbContext()) { var allbooks = db.Books .Include(nameof(Author)) .ToList(); foreach (var book in allbooks) { Console.WriteLine($"Title:{book.Title}, Year:{book.PublishedYear}, Author:{book.Author.Name} {book.Author.Gender} {book.Author.Birthday}"); } } } private static void Practice13_3() { using (var db = new BooksDbContext()) { var longTitleLength = db.Books.Max(book => book.Title.Length); var books = db.Books.Where(b => b.Title.Length == longTitleLength); foreach (var book in books) { Console.WriteLine("가장 긴 책의 이름은: {0}", book.Title); } } } private static void Practice13_4() { using (var db = new BooksDbContext()) { var books = db.Books.Include(nameof(Author)) .OrderBy(b => b.PublishedYear) .Take(3); foreach (var book in books) { Console.WriteLine($"제목: {book.Title}, 저자: {book.Author.Name}"); } } } private static void Practice13_5() { using (var db = new BooksDbContext()) { var authors = db.Authors.Include("Books") .OrderByDescending(a => a.Birthday); foreach (var author in authors) { foreach (var book in author.Books) { Console.WriteLine($"저자: {author.Name}, 제목: {book.Title}, 발행연도: {book.PublishedYear}"); } } } } } } | cs |
'프로그래밍 공부 > C#' 카테고리의 다른 글
비동기/병렬 프로그래밍 (0) | 2019.02.21 |
---|---|
프로세스, 버전, 구성파일(config), Http통신, zip파일처리, 협정세계시(utc) (0) | 2019.01.28 |
직렬화, 역직렬화 (0) | 2019.01.24 |
XML 파일 처리 (0) | 2019.01.24 |
정규 표현식 활용하여 문자열 처리하기 (0) | 2019.01.24 |