none
Nomenclatura Chave primária e estrangeira RRS feed

  • Pergunta

  • Para o caso de aplicação asp.net mvc 4 e o Entity Framework 5.0 usando o Database First Entity Framework, qual a nomenclatura para chave primária e estrangeira?

    Eu tenho meu banco como chave primaria para a Tabela1=id e chave estrangeira na tabela2=codTabela1. É possivel? 

    segunda-feira, 20 de janeiro de 2014 20:31

Respostas

  • é sim Wilson, Boris !!!

    Seria mais ou menos assim

    Vamos dizer seguindo esse exemplo:

    O Código para gerar esse relacionamento seria assim:

    [Table("Produtos")]
    public class Produtos
    {
    	[Key]
    	[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
    	public int ProdutoId { get; set; }
    	public string Descricao { get; set; }
    
    	[Required]
    	public int CategoriaId { get; set; }
    	
    	[ForeignKey("CategoriaId")]
    	public virtual Categorias Categoria { get; set; }
    
    }
    
    [Table("Categorias")]
    public class Categorias
    {
    	[Key()]
    	[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
    	public int CategoriaId { get; set; }
    
    	[Required]
    	public string Nome { get; set; }
    
    	[ForeignKey("CategoriaId")]
    	public ICollection<Produtos> Produtos { get; set; }
    
    }
    
    public class Db : DbContext
    {
    	public Db() : base("name=ContextDb") { }
    
    	protected override void OnModelCreating(DbModelBuilder modelBuilder)
    	{
    		modelBuilder.Conventions.Remove(new System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention());
    		modelBuilder.Conventions.Remove(new System.Data.Entity.ModelConfiguration.Conventions.PluralizingEntitySetNameConvention());
    		base.OnModelCreating(modelBuilder);
    	}
    	public DbSet<Produtos> Produto { get; set; }
    	public DbSet<Categorias> Categoria { get; set; }
    }

    ForeignKey é o nomenclatura utilizada!!!

    Eu gosto particularmento de decorar a classe com DataAnnotations ... !!! segue abaixo os namespaces

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    Qualquer dúvida !!! 


    Fulvio Cezar Canducci Dias

    segunda-feira, 20 de janeiro de 2014 23:53

Todas as Respostas

  • Sim, é possível. 

    Chave primária -> Key

    [Key]
    public int ID {get; set;}


    Chave estrangeira -> ForeignKey

    [ForeignKey("Tabela1")]
    public int codtabela1 {get; set;}
    public virtual Tabela1 Tabela1 {get; set;}


    Uma vez que vc está usando Database First, irá precisar de uma classe partial para fazer isso.

    [Metadata(typeof(ValidarTabela)] public partial class Tabela1 {} public class ValidarTabela { [Key] public int ID {get; set;}

    [ForeignKey("Tabela1")] public int codtabela1 {get; set;} public virtual Tabela1 Tabela1 {get; set;} }

    Os campos no ValidarTabela devem ser iguais a da sua tabela.

    Att,



    • Editado _Omnislash_ segunda-feira, 20 de janeiro de 2014 23:47 ...
    segunda-feira, 20 de janeiro de 2014 23:43
  • é sim Wilson, Boris !!!

    Seria mais ou menos assim

    Vamos dizer seguindo esse exemplo:

    O Código para gerar esse relacionamento seria assim:

    [Table("Produtos")]
    public class Produtos
    {
    	[Key]
    	[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
    	public int ProdutoId { get; set; }
    	public string Descricao { get; set; }
    
    	[Required]
    	public int CategoriaId { get; set; }
    	
    	[ForeignKey("CategoriaId")]
    	public virtual Categorias Categoria { get; set; }
    
    }
    
    [Table("Categorias")]
    public class Categorias
    {
    	[Key()]
    	[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
    	public int CategoriaId { get; set; }
    
    	[Required]
    	public string Nome { get; set; }
    
    	[ForeignKey("CategoriaId")]
    	public ICollection<Produtos> Produtos { get; set; }
    
    }
    
    public class Db : DbContext
    {
    	public Db() : base("name=ContextDb") { }
    
    	protected override void OnModelCreating(DbModelBuilder modelBuilder)
    	{
    		modelBuilder.Conventions.Remove(new System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention());
    		modelBuilder.Conventions.Remove(new System.Data.Entity.ModelConfiguration.Conventions.PluralizingEntitySetNameConvention());
    		base.OnModelCreating(modelBuilder);
    	}
    	public DbSet<Produtos> Produto { get; set; }
    	public DbSet<Categorias> Categoria { get; set; }
    }

    ForeignKey é o nomenclatura utilizada!!!

    Eu gosto particularmento de decorar a classe com DataAnnotations ... !!! segue abaixo os namespaces

    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    Qualquer dúvida !!! 


    Fulvio Cezar Canducci Dias

    segunda-feira, 20 de janeiro de 2014 23:53