I would model the classes as follows:
public class Pedido
{
public int Id { get; set; }
public DateTime Data { get; set; }
public virtual List<Produto> Produtos { get; set; }
}
public class Produto
{
public int Id { get; set; }
public string Nome { get; set; }
}
public class Context : DbContext
{
public Context() : base("DefaultConnection")
{
}
public DbSet<Pedido> Pedidos { get; set; }
public DbSet<Produto> Produtos { get; set; }
}
In case I used the virtual for the example, if I was using EF as an ORM, I also changed the RequestId and ProductId to Id, just to stay default.
Remembering that in this example we are showing objects of our application, not in the Data Model (SQL).
If your "OrderItem" in the database has no property (other than the Product Id and the OrderId), you do not need to create an intermediate object in C # called OrderOrder, it makes sense to create this object if your OrderOrder has Quantity for example.
Below is an example of use in a console:
class Program
{
static void Main(string[] args)
{
var context = new Context();
var produto = new Produto() { Nome = "Produto 1" };
var produto2 = new Produto() { Nome = "Produto 2" };
context.Produtos.Add(produto);
context.Produtos.Add(produto2);
context.SaveChanges();
var pedido = new Pedido() { Data = DateTime.Now };
pedido.Produtos = new List<Produto>();
pedido.Produtos.Add(produto);
pedido.Produtos.Add(produto2);
context.Pedidos.Add(pedido);
context.SaveChanges();
}
}