Hallo iedereen
Ik ben sinds vandaag gestart met Entity Framework/SQLite/.Net Core
Nu probeer ik een 13 in een dozijn API te bouwen om wat te testen.
Concreet probeer ik een "User" toe te voegen aan de database.
User class:
UserContext:
En dan nog een volledig auto-generated controller class:
In mijn startup class definieer ik ook de de databankconnectie:
Nu, als ik de code test, wordt de database wel aangemaakt, maar op het moment dat ik een endpoint aanspreek, krijg ik telkens de melding dat de tabel "Users" niet bestaat.
Ik ben vrij nieuw met het Code First principe, maar ik had gedacht dat deze tabel on the fly aangemaakt zou worden bij het aanspreken van een endpoint die met de UserContext te maken heeft.
Ik dacht dat ik eventueel iets zou kunnen doen met de options instance in de constructor, maar daar wordt ik ook niet veel wijzer van.
Hoe specifieer ik het aanmaken van tables?
Bedankt voor de input!
Ik ben sinds vandaag gestart met Entity Framework/SQLite/.Net Core
Nu probeer ik een 13 in een dozijn API te bouwen om wat te testen.
Concreet probeer ik een "User" toe te voegen aan de database.
User class:
code:
1
2
3
4
5
6
| public class User { public string Id { get; set; } public string Firstname { get; set; } public string Lastname { get; set; } } |
UserContext:
code:
1
2
3
4
5
6
7
8
9
| public class UserContext : DbContext { public UserContext(DbContextOptions<UserContext> options) : base(options) { } public DbSet<User> Users { get; set; } } |
En dan nog een volledig auto-generated controller class:
code:
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
| [Route("api/[controller]")] [ApiController] public class UsersController : ControllerBase { private readonly UserContext _context; public UsersController(UserContext context) { _context = context; } // GET: api/Users [HttpGet] public async Task<ActionResult<IEnumerable<User>>> GetUsers() { return await _context.Users.ToListAsync(); } // GET: api/Users/5 [HttpGet("{id}")] public async Task<ActionResult<User>> GetUser(string id) { var user = await _context.Users.FindAsync(id); if (user == null) { return NotFound(); } return user; } // PUT: api/Users/5 // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPut("{id}")] public async Task<IActionResult> PutUser(string id, User user) { if (id != user.Id) { return BadRequest(); } _context.Entry(user).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!UserExists(id)) { return NotFound(); } else { throw; } } return NoContent(); } // POST: api/Users // To protect from overposting attacks, see https://go.microsoft.com/fwlink/?linkid=2123754 [HttpPost] public async Task<ActionResult<User>> PostUser(User user) { _context.Users.Add(user); try { await _context.SaveChangesAsync(); } catch (DbUpdateException) { if (UserExists(user.Id)) { return Conflict(); } else { throw; } } return CreatedAtAction("GetUser", new { id = user.Id }, user); } // DELETE: api/Users/5 [HttpDelete("{id}")] public async Task<IActionResult> DeleteUser(string id) { var user = await _context.Users.FindAsync(id); if (user == null) { return NotFound(); } _context.Users.Remove(user); await _context.SaveChangesAsync(); return NoContent(); } private bool UserExists(string id) { return _context.Users.Any(e => e.Id == id); } } |
In mijn startup class definieer ik ook de de databankconnectie:
code:
1
2
3
4
5
| public void ConfigureServices(IServiceCollection services) { services.AddDbContext<UserContext>(opt => opt.UseSqlite("Filename=Controller.db")); services.AddControllers(); } |
Nu, als ik de code test, wordt de database wel aangemaakt, maar op het moment dat ik een endpoint aanspreek, krijg ik telkens de melding dat de tabel "Users" niet bestaat.
Ik ben vrij nieuw met het Code First principe, maar ik had gedacht dat deze tabel on the fly aangemaakt zou worden bij het aanspreken van een endpoint die met de UserContext te maken heeft.
Ik dacht dat ik eventueel iets zou kunnen doen met de options instance in de constructor, maar daar wordt ik ook niet veel wijzer van.
Hoe specifieer ik het aanmaken van tables?
Bedankt voor de input!