If your relationship entity has only the references to the primary tables, then the RU will only treat it as a collection:
Note that the properties are virtual (virtual), that is, the RU maps them as navigation property (recommended reading).
In this case, the navigation property only signals to the EF that a related record can be found in the specified entity. In the examples below it has been indicated that a Product may (or may not) be associated with several SALES or a Sale may (or may not) have several PRODUCTS.
Product
See in this template there is a collection of SALE.
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("Produto")]
public partial class Produto
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Produto()
{
Venda = new HashSet<Venda>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int idProduto { get; set; }
[StringLength(10)]
public string descricao { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Venda> Venda { get; set; }
}
Sale
And in this model, a collection of PRODUCT.
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("Venda")]
public partial class Venda
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
public Venda()
{
Produto = new HashSet<Produto>();
}
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int idVenda { get; set; }
public DateTime? referencia { get; set; }
public int? qtd { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<Produto> Produto { get; set; }
}
To create the model - A justification
If you notice, there is no reason for EF to create a template since all fields will be automatically filled in when you link a product to sale or vice versa.
If at random, your Sales Tableproduct has other fields (besides foreign fields), EF will create a template for it, so you can design your application and provide the user with a means to fill these fields.
Note that I simply created the Discount field and the template was created:
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
[Table("ProdutoVenda")]
public partial class ProdutoVenda
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int idProduto { get; set; }
[Key]
[Column(Order = 1)]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int idVenda { get; set; }
public double? desconto { get; set; }
public virtual Produto Produto { get; set; }
public virtual Venda Venda { get; set; }
}
Other readings
Many Relationship for Many Entity Framework 6
List, virtual and Entity Framework
The model class is my context, should I leave it with the name of the class I want to import from the bank? I don’t understand
– Loid
@Vanderson, if I understand your question... it will not really be created the entity Productovenda, because, if it is a Relationship N to N, that is, the Product Entity has a Sales Collection and the Sale entity has a Product Collection, this is an EF convention, so it’s correct.
– Junior Porfirio
Personal really is a relationship from N to N. I thought the Entity would create the Product entity because when I go to create a table by Entity I have to create the Product class in visual studio.
– Loid