So I have a Customer entity and a Movie entity and I configured the many to many relationship correctly and EF created the third table CustomerMovie with two FK’s being CustomerId and MovieId both being the primary key. so now when I started creating the endpoints and it was all fine until I got to the AddMovie endpoint which adds a new movie to the database, it works but the table CustomerMovie is empty while it should have the CustomerId of the customer who added the movie and the MovieId of the movie that was added, so not sure if the endpoint implementation is wrong so far as to reach this goal or is the configuration wrong.
This my endpoint implementation
[HttpPost("AddMovie"), Authorize]
public ActionResult<Movie> AddMovie([FromBody] MovieDto movie)
{
if (movie == null || !ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (_movieRepository.CheckMovieByTitle(movie.Title))
{
ModelState.AddModelError("", "Movie Already exists, if both share the same name add the release year with the name");
return StatusCode(422, ModelState);
}
var userEmail = User.FindFirstValue(ClaimTypes.Email);
Customer customerAdded = _customerRepository.GetCustomerByEmail(userEmail);
Movie addedMovie = _movieRepository.AddMovie(movie, userEmail, customerAdded);
return Ok(addedMovie);
}
and this is what’s in the repository class(I’m using repository pattern)
public Movie AddMovie(MovieDto movie, string email, Customer customerAdded)
{
Movie newMovie = new Movie
{
Title = movie.Title,
Description = movie.Description,
Duration = movie.Duration,
ReleaseDate = movie.ReleaseDate,
Rating = 0,
AddedByUser = email
};
_context.Movie.Add(newMovie);
Save();
return newMovie;
}
as for the configuration of the relationship this the context:
public class ClassContextDb : DbContext
{
public ClassContextDb(DbContextOptions<ClassContextDb> options) : base(options)
{
}
public DbSet<Customer> Customer { get; set; }
public DbSet<Movie> Movie { get; set; }
public DbSet<Genre> Genre { get; set; }
public DbSet<MembershipType> MembershipType { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Customer>()
.HasMany(c => c.Movie)
.WithMany(m => m.Customer)
.UsingEntity(j => j.ToTable("CustomerMovie"));
}
}
and these are the properties in the models themselves:
public virtual ICollection Movie { get; set; } = new List(); //in Customer class
public virtual ICollection Customer { get; set; } = new List(); // in Movie class
Yazeed Fayoumi is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.